-- ============================================================
-- Base de datos para integración PAYCOMET
-- ============================================================

-- Crear base de datos
CREATE DATABASE IF NOT EXISTS PAYCOMET
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;

USE PAYCOMET;
-- ============================================================
-- Tabla: pagos
-- Almacena todas las transacciones de pago
-- ============================================================
CREATE TABLE IF NOT EXISTS pagos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    referencia VARCHAR(50) UNIQUE NOT NULL COMMENT 'Referencia única del pedido',
    importe INT NOT NULL COMMENT 'Importe en céntimos (1000 = 10.00€)',
    moneda VARCHAR(3) DEFAULT 'EUR',
    concepto VARCHAR(255) DEFAULT NULL,
    
    -- Estado del pago
    estado ENUM('pendiente', 'procesando', 'ok', 'error', 'confirmado') DEFAULT 'pendiente',
    
    -- Datos de tokenización (para cobros futuros)
    id_user VARCHAR(20) DEFAULT NULL COMMENT 'ID usuario PAYCOMET',
    token_user VARCHAR(50) DEFAULT NULL COMMENT 'Token de tarjeta PAYCOMET',
    
    -- Respuesta de PAYCOMET
    auth_code VARCHAR(100) DEFAULT NULL COMMENT 'Código de autorización bancaria',
    paycomet_id VARCHAR(20) DEFAULT NULL COMMENT 'ID único de transacción PAYCOMET',
    error_code INT DEFAULT NULL,
    error_msg VARCHAR(255) DEFAULT NULL,
    
    -- Información de la tarjeta
    card_brand VARCHAR(20) DEFAULT NULL COMMENT 'VISA, MASTERCARD, etc.',
    card_country VARCHAR(5) DEFAULT NULL COMMENT 'País emisor (ES, FR, etc.)',
    card_type VARCHAR(20) DEFAULT NULL COMMENT 'CREDIT, DEBIT',
    
    -- Seguridad
    secure_payment TINYINT DEFAULT 0 COMMENT '1 si usó 3D Secure',
    ip_cliente VARCHAR(45) DEFAULT NULL,
    
    -- Timestamps
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    webhook_at TIMESTAMP NULL COMMENT 'Fecha de confirmación por webhook',
    
    -- Índices
    INDEX idx_estado (estado),
    INDEX idx_created (created_at),
    INDEX idx_id_user (id_user)
    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- Tabla: usuarios_tarjetas
-- Almacena tarjetas tokenizadas para cobros recurrentes
-- ============================================================
CREATE TABLE IF NOT EXISTS usuarios_tarjetas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL COMMENT 'ID de tu sistema de usuarios',
    
    -- Tokens de PAYCOMET
    id_user VARCHAR(20) NOT NULL,
    token_user VARCHAR(50) NOT NULL,
    
    -- Info de la tarjeta (para mostrar al usuario)
    card_brand VARCHAR(20) DEFAULT NULL,
    card_country VARCHAR(5) DEFAULT NULL,
    ultimos_digitos VARCHAR(4) DEFAULT NULL COMMENT 'Últimos 4 dígitos',
    
    -- Estado
    activa TINYINT DEFAULT 1,
    
    -- Timestamps
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    -- Índices
    INDEX idx_usuario (usuario_id),
    UNIQUE KEY uk_token (id_user, token_user)
    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- Tabla: webhook_log
-- Log de todas las notificaciones recibidas
-- ============================================================
CREATE TABLE IF NOT EXISTS webhook_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    referencia VARCHAR(50) DEFAULT NULL,
    transaction_type INT DEFAULT NULL,
    response VARCHAR(10) DEFAULT NULL,
    error_id INT DEFAULT NULL,
    
    -- Datos completos recibidos
    payload TEXT COMMENT 'JSON con todos los datos recibidos',
    
    -- Verificación
    firma_valida TINYINT DEFAULT 0,
    ip_origen VARCHAR(45) DEFAULT NULL,
    
    -- Timestamp
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_referencia (referencia)
    
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- Usuario para la aplicación (opcional)
-- ============================================================
CREATE USER IF NOT EXISTS 'paycomet_user'@'localhost' IDENTIFIED BY 'TuPasswordSeguro1977';
GRANT SELECT, INSERT, UPDATE ON PAYCOMET.* TO 'paycomet_user'@'localhost';
FLUSH PRIVILEGES;
