-- ============================================================
-- Club Palestino - Módulo de Estacionamientos
-- ============================================================

-- ── 1. TIPOS DE ESTACIONAMIENTO ───────────────────────────────
CREATE TABLE IF NOT EXISTS `estacionamiento_tipos` (
    `id`          TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
    `nombre`      VARCHAR(60)      NOT NULL COMMENT 'Ej: Interior, Exterior',
    `descripcion` VARCHAR(200)     NULL,
    `es_pagado`   TINYINT(1)       NOT NULL DEFAULT 1 COMMENT '1=pago anual requerido, 0=libre para socios',
    `valor_uf`    DECIMAL(6,2)     NOT NULL DEFAULT 0 COMMENT 'Costo anual en UF (0 si es libre)',
    `control_lpr` TINYINT(1)       NOT NULL DEFAULT 1 COMMENT '1=usa LPR para control',
    `capacidad_total` SMALLINT UNSIGNED NULL COMMENT 'Cupos físicos totales del estacionamiento',
    `activo`      TINYINT(1)       NOT NULL DEFAULT 1,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `estacionamiento_tipos` (`nombre`, `descripcion`, `es_pagado`, `valor_uf`, `control_lpr`, `capacidad_total`) VALUES
('Interior', 'Estacionamiento cubierto, requiere pago anual. Control simultáneo por cupos pagados.', 1, 13.00, 1, 100),
('Exterior', 'Estacionamiento exterior gratuito para socios con patente inscrita. Sin límite de cupos.', 0, 0.00, 1, NULL);

-- ── 2. CONTRATOS DE ESTACIONAMIENTO (pagados) ────────────────
-- Un socio/grupo familiar puede comprar 1 o más espacios interiores
CREATE TABLE IF NOT EXISTS `estacionamiento_contratos` (
    `id`              INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `grupo_familiar_id` INT UNSIGNED   NULL     COMMENT 'FK grupo familiar (si aplica)',
    `socio_id`        INT UNSIGNED     NOT NULL COMMENT 'Socio titular del contrato',
    `tipo_id`         TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'FK estacionamiento_tipos',
    `cupos_pagados`   TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT 'Cantidad de espacios pagados',
    `valor_uf_total`  DECIMAL(8,2)     NOT NULL COMMENT 'valor_uf * cupos_pagados',
    `fecha_inicio`    DATE             NOT NULL,
    `fecha_fin`       DATE             NOT NULL,
    `estado`          ENUM('activo','vencido','cancelado') NOT NULL DEFAULT 'activo',
    `created_at`      TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`      TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_socio`  (`socio_id`),
    KEY `idx_grupo`  (`grupo_familiar_id`),
    KEY `idx_estado` (`estado`, `fecha_fin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Contratos de estacionamiento interior pagado por socio/grupo familiar';

-- ── 3. PATENTES REGISTRADAS ───────────────────────────────────
CREATE TABLE IF NOT EXISTS `estacionamiento_patentes` (
    `id`              INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `socio_id`        INT UNSIGNED     NOT NULL COMMENT 'Socio dueño del vehículo',
    `grupo_familiar_id` INT UNSIGNED   NULL,
    `patente`         VARCHAR(8)       NOT NULL COMMENT 'Patente en formato ABCD12 o AB1234',
    `patente_norm`    VARCHAR(8)       NOT NULL COMMENT 'Patente normalizada (sin espacios, mayúsculas)',
    `descripcion`     VARCHAR(100)     NULL     COMMENT 'Ej: Toyota RAV4 blanca',
    `activo`          TINYINT(1)       NOT NULL DEFAULT 1,
    `created_at`      TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_patente_norm` (`patente_norm`),
    KEY `idx_socio_patente` (`socio_id`),
    KEY `idx_grupo_patente` (`grupo_familiar_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Patentes de vehículos registradas por socio';

-- ── 4. LOG DE ACCESOS VEHICULARES ─────────────────────────────
CREATE TABLE IF NOT EXISTS `estacionamiento_accesos` (
    `id`              BIGINT UNSIGNED  NOT NULL AUTO_INCREMENT,
    `patente_id`      INT UNSIGNED     NULL     COMMENT 'FK patente si fue reconocida',
    `patente_raw`     VARCHAR(10)      NOT NULL COMMENT 'Patente tal como llegó del LPR',
    `socio_id`        INT UNSIGNED     NULL,
    `grupo_familiar_id` INT UNSIGNED   NULL,
    `tipo_id`         TINYINT UNSIGNED NOT NULL COMMENT 'Interior o Exterior',
    `contrato_id`     INT UNSIGNED     NULL     COMMENT 'FK contrato interior si aplica',
    `evento`          ENUM('entrada','salida') NOT NULL,
    `resultado`       ENUM('permitido','denegado','sin_cupo','patente_no_registrada','socio_inactivo') NOT NULL,
    `cupos_usados_antes` TINYINT UNSIGNED NULL  COMMENT 'Cupos ocupados ANTES de este evento',
    `cupos_pagados`   TINYINT UNSIGNED NULL     COMMENT 'Cupos pagados del contrato',
    `mensaje_sistema` VARCHAR(300)     NULL,
    `notificacion_enviada` TINYINT(1)  NOT NULL DEFAULT 0,
    `imagen_lpr`      VARCHAR(200)     NULL     COMMENT 'Ruta imagen capturada por LPR',
    `dispositivo_id`  VARCHAR(50)      NULL     COMMENT 'ID del lector LPR',
    `timestamp`       TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_patente`  (`patente_id`),
    KEY `idx_socio_acc`(`socio_id`),
    KEY `idx_grupo_acc`(`grupo_familiar_id`),
    KEY `idx_timestamp`(`timestamp`),
    KEY `idx_tipo_evento` (`tipo_id`, `evento`, `timestamp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Log completo de todos los accesos vehiculares detectados por LPR';

-- ── 5. NOTIFICACIONES PENDIENTES ──────────────────────────────
-- Cola de notificaciones WhatsApp pendientes de enviar
CREATE TABLE IF NOT EXISTS `estacionamiento_notificaciones` (
    `id`          INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    `socio_id`    INT UNSIGNED  NOT NULL,
    `tipo`        ENUM(
        'cupo_liberado',        -- Se liberó un cupo interior
        'acceso_denegado',      -- Intento denegado
        'acceso_sin_cupo',      -- Sin cupo disponible interior
        'patente_no_registrada',-- Patente desconocida detectada
        'contrato_por_vencer',  -- Contrato vence en X días
        'acceso_exitoso'        -- Confirmación entrada/salida
    ) NOT NULL,
    `payload`     JSON          NOT NULL COMMENT 'Datos para armar el mensaje',
    `estado`      ENUM('pendiente','enviado','error') NOT NULL DEFAULT 'pendiente',
    `intentos`    TINYINT       NOT NULL DEFAULT 0,
    `error_msg`   VARCHAR(300)  NULL,
    `created_at`  TIMESTAMP     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `sent_at`     TIMESTAMP     NULL,
    PRIMARY KEY (`id`),
    KEY `idx_notif_estado` (`estado`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── PARÁMETROS DE ESTACIONAMIENTO EN config_sistema ──────────
INSERT INTO `config_sistema` (`clave`, `valor`, `descripcion`) VALUES
('estac_interior_uf_anual',    '13',  'Tarifa anual estacionamiento interior (UF por cupo)'),
('estac_max_cupos_por_contrato','5',  'Máximo de cupos pagados por socio/grupo familiar'),
('estac_notif_cupo_liberado',  '1',   'Enviar WhatsApp cuando se libera un cupo interior (1=sí)'),
('estac_notif_acceso_exitoso', '0',   'Enviar WhatsApp en cada entrada/salida exitosa (0=no, puede ser mucho)'),
('estac_notif_denegado',       '1',   'Enviar WhatsApp si acceso es denegado (1=sí)'),
('estac_lpr_confianza_min',    '85',  'Confianza mínima del LPR para aceptar lectura (%)'),
('estac_tiempo_min_entre_eventos','2', 'Minutos mínimos entre entrada y salida del mismo vehículo')
ON DUPLICATE KEY UPDATE valor=VALUES(valor);

