-- Tabla de bancos
CREATE TABLE banks (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  code VARCHAR(10) UNIQUE NOT NULL,
  is_active BOOLEAN DEFAULT true,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de configuración de bancos
CREATE TABLE bank_configs (
  id INT PRIMARY KEY AUTO_INCREMENT,
  bank_id INT,
  config_key VARCHAR(100) NOT NULL,
  config_value TEXT NOT NULL,
  description TEXT,
  is_encrypted BOOLEAN DEFAULT false,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (bank_id) REFERENCES banks(id) ON DELETE CASCADE
);

-- Tabla de transacciones
CREATE TABLE transactions (
  id INT PRIMARY KEY AUTO_INCREMENT,
  reference VARCHAR(100) UNIQUE NOT NULL,
  bank_id INT,
  transaction_type ENUM('pago_movil', 'transferencia', 'consulta') NOT NULL,
  amount DECIMAL(15,2),
  currency VARCHAR(10) DEFAULT 'VES',
  payer_identification VARCHAR(50),
  payer_phone VARCHAR(20),
  beneficiary_phone VARCHAR(20),
  beneficiary_identification VARCHAR(50),
  bank_origin VARCHAR(10),
  payment_date DATE,
  status ENUM('pending', 'completed', 'failed', 'cancelled') DEFAULT 'pending',
  bank_response_code VARCHAR(50),
  bank_response_message TEXT,
  raw_request_data JSON,
  raw_response_data JSON,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (bank_id) REFERENCES banks(id)
);

-- Tabla de webhooks recibidos
CREATE TABLE webhook_logs (
  id INT PRIMARY KEY AUTO_INCREMENT,
  bank_id INT,
  payload JSON NOT NULL,
  headers JSON,
  ip_address VARCHAR(45),
  processed BOOLEAN DEFAULT false,
  processing_errors TEXT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (bank_id) REFERENCES banks(id)
);

-- Tabla de API keys
CREATE TABLE api_keys (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100) NOT NULL,
  api_key VARCHAR(100) UNIQUE NOT NULL,
  secret_hash VARCHAR(255) NOT NULL,
  is_active BOOLEAN DEFAULT true,
  permissions JSON,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Insertar bancos básicos
INSERT INTO banks (name, code) VALUES 
('Banco de Venezuela', '0102'),
('Banco Banesco', '0104'),
('Banco Provincial', '0105');




ALTER TABLE bank_configs ADD COLUMN api_secret VARCHAR(500) AFTER config_value;
ALTER TABLE bank_configs ADD COLUMN merchant_id VARCHAR(100) AFTER api_secret;
ALTER TABLE bank_configs ADD COLUMN terminal_id VARCHAR(100) AFTER merchant_id;

-- Actualizar configuración para 100% Banco
INSERT INTO bank_configs (bank_id, config_key, config_value, api_secret, merchant_id, terminal_id, description) VALUES 
(
  (SELECT id FROM banks WHERE code = '0156'), 
  'api_key', 
  'tu_api_key_100banco', 
  'tu_api_secret_100banco', 
  '885847', 
  'us3lc2p', 
  'Configuración 100% Banco'
);