-- ============================================================
-- TICKETERA - Club Palestino CRM v2.0
-- Entradas + Consumo para cualquier evento
-- ============================================================

-- Eventos ticketeados (vincula a club_eventos o standalone)
CREATE TABLE IF NOT EXISTS ticket_eventos (
    id            INT UNSIGNED NOT NULL AUTO_INCREMENT,
    evento_id     INT UNSIGNED NULL COMMENT 'FK opcional a club_eventos',
    nombre        VARCHAR(200) NOT NULL,
    descripcion   TEXT NULL,
    fecha_evento  DATETIME NOT NULL,
    lugar         VARCHAR(200) NULL,
    imagen_url    VARCHAR(500) NULL,
    venta_online  TINYINT(1) NOT NULL DEFAULT 1,
    venta_desde   DATETIME NULL,
    venta_hasta   DATETIME NULL,
    solo_socios   TINYINT(1) NOT NULL DEFAULT 0,
    estado        ENUM('borrador','publicado','agotado','finalizado','cancelado') NOT NULL DEFAULT 'borrador',
    metodo_pago   SET('webpay','flow','mercadopago','presencial') NOT NULL DEFAULT 'presencial',
    created_at    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY idx_evento_tk (evento_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tipos de ticket (entrada general, VIP, nino, etc.) + consumo
CREATE TABLE IF NOT EXISTS ticket_tipos (
    id            INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ticket_evento_id INT UNSIGNED NOT NULL,
    categoria     ENUM('entrada','consumo') NOT NULL DEFAULT 'entrada',
    nombre        VARCHAR(150) NOT NULL COMMENT 'Ej: Entrada general, VIP, Cerveza, Empanada',
    descripcion   VARCHAR(300) NULL,
    moneda        ENUM('CLP','UF','GRATIS') NOT NULL DEFAULT 'CLP',
    valor_clp     INT UNSIGNED NULL,
    valor_uf      DECIMAL(8,2) NULL,
    proveedor_id  INT UNSIGNED NULL COMMENT 'Para consumo: a que proveedor/stand pertenece',
    proveedor_nombre VARCHAR(150) NULL,
    cupo_total    INT UNSIGNED NULL COMMENT 'NULL = ilimitado',
    cupo_vendido  INT UNSIGNED NOT NULL DEFAULT 0,
    max_por_compra TINYINT UNSIGNED NOT NULL DEFAULT 10,
    color         VARCHAR(7) NOT NULL DEFAULT '#1B7A3E',
    activo        TINYINT(1) NOT NULL DEFAULT 1,
    orden         TINYINT UNSIGNED NOT NULL DEFAULT 0,
    PRIMARY KEY (id),
    KEY idx_ticket_tipo (ticket_evento_id,categoria)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Compras (una transaccion puede tener varios tickets)
CREATE TABLE IF NOT EXISTS ticket_compras (
    id            INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ticket_evento_id INT UNSIGNED NOT NULL,
    codigo_compra VARCHAR(20) NOT NULL COMMENT 'Codigo unico de la compra',
    comprador_nombre VARCHAR(150) NOT NULL,
    comprador_rut VARCHAR(20) NULL,
    comprador_email VARCHAR(100) NULL,
    comprador_telefono VARCHAR(20) NULL,
    socio_id      INT UNSIGNED NULL,
    total_clp     INT UNSIGNED NOT NULL DEFAULT 0,
    cantidad_items INT UNSIGNED NOT NULL DEFAULT 0,
    metodo_pago   VARCHAR(20) NOT NULL DEFAULT 'presencial',
    estado_pago   ENUM('pendiente','pagado','rechazado','reembolsado','gratis') NOT NULL DEFAULT 'pendiente',
    referencia_pago VARCHAR(100) NULL COMMENT 'ID transaccion Webpay/Flow',
    origen        ENUM('online','presencial','admin') NOT NULL DEFAULT 'online',
    created_at    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uk_codigo_compra (codigo_compra),
    KEY idx_evento_compra (ticket_evento_id,estado_pago)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tickets individuales generados (cada uno con su QR)
CREATE TABLE IF NOT EXISTS ticket_emitidos (
    id            INT UNSIGNED NOT NULL AUTO_INCREMENT,
    compra_id     INT UNSIGNED NOT NULL,
    tipo_id       INT UNSIGNED NOT NULL,
    ticket_evento_id INT UNSIGNED NOT NULL,
    categoria     ENUM('entrada','consumo') NOT NULL,
    codigo_qr     VARCHAR(40) NOT NULL COMMENT 'Codigo unico del ticket',
    nombre_tipo   VARCHAR(150) NOT NULL,
    valor_clp     INT UNSIGNED NOT NULL DEFAULT 0,
    proveedor_nombre VARCHAR(150) NULL,
    estado        ENUM('valido','usado','anulado') NOT NULL DEFAULT 'valido',
    usado_at      DATETIME NULL,
    usado_por     VARCHAR(100) NULL COMMENT 'Quien valido en puerta',
    PRIMARY KEY (id),
    UNIQUE KEY uk_codigo_qr (codigo_qr),
    KEY idx_compra_emit (compra_id),
    KEY idx_evento_emit (ticket_evento_id,estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Liquidacion a proveedores de consumo
CREATE TABLE IF NOT EXISTS ticket_liquidaciones (
    id            INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ticket_evento_id INT UNSIGNED NOT NULL,
    proveedor_nombre VARCHAR(150) NOT NULL,
    total_vendido INT UNSIGNED NOT NULL DEFAULT 0,
    total_canjeado INT UNSIGNED NOT NULL DEFAULT 0,
    comision_pct  DECIMAL(5,2) NOT NULL DEFAULT 0,
    monto_liquidar INT UNSIGNED NOT NULL DEFAULT 0,
    estado        ENUM('pendiente','pagado') NOT NULL DEFAULT 'pendiente',
    fecha_pago    DATE NULL,
    created_at    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
