-- =============================================================================
-- 03 — PEDIDOS: orden + items + estados + zonas de delivery
-- =============================================================================

-- Zonas de delivery (definidas por el restaurante con sus precios)
CREATE TABLE IF NOT EXISTS zonas_delivery (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    nombre          VARCHAR(100) NOT NULL,    -- "Centro", "Caballito", "Zona oeste"
    precio_envio    DECIMAL(8,2) NOT NULL,
    tiempo_estimado_min INT DEFAULT 35,
    activa          TINYINT DEFAULT 1,
    -- Definición geográfica simplificada (V1: polígono GeoJSON, MVP: radio desde local)
    centro_lat      DECIMAL(10,7) NULL,
    centro_lng      DECIMAL(10,7) NULL,
    radio_km        DECIMAL(5,2) NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Estados de pedido
CREATE TABLE IF NOT EXISTS pedidos_estados (
    id     INT PRIMARY KEY,
    nombre VARCHAR(40) NOT NULL,
    orden  INT,
    color  VARCHAR(20)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO pedidos_estados (id, nombre, orden, color) VALUES
    (1,  'Nuevo',          1, '#fbbf24'),
    (2,  'Esperando pago', 2, '#f59e0b'),
    (3,  'Pago confirmado',3, '#10b981'),
    (4,  'En cocina',      4, '#3b82f6'),
    (5,  'Listo',          5, '#8b5cf6'),
    (6,  'En camino',      6, '#06b6d4'),
    (7,  'Entregado',      7, '#22c55e'),
    (100,'Cancelado',     10, '#ef4444'),
    (101,'Rechazado',     11, '#dc2626');

-- Tipos de entrega
CREATE TABLE IF NOT EXISTS tipos_entrega (
    id     INT PRIMARY KEY,
    nombre VARCHAR(40) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO tipos_entrega (id, nombre) VALUES
    (1, 'Retiro en local'),
    (2, 'Delivery propio'),
    (3, 'Delivery terceros');   -- futuro

-- Formas de pago
CREATE TABLE IF NOT EXISTS formas_pago (
    id     INT PRIMARY KEY,
    nombre VARCHAR(40),
    icono  VARCHAR(8)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO formas_pago (id, nombre, icono) VALUES
    (1, 'Efectivo',       '💵'),
    (2, 'Transferencia',  '🏦'),
    (3, 'MercadoPago',    '💳'),
    (4, 'Tarjeta (POS)',  '💳');

-- Pedidos
CREATE TABLE IF NOT EXISTS pedidos (
    id                  INT AUTO_INCREMENT PRIMARY KEY,
    id_cliente          INT NOT NULL,
    id_estado           INT NOT NULL DEFAULT 1,
    id_tipo_entrega     INT NOT NULL,
    id_direccion        INT NULL,                   -- si es delivery
    id_zona_delivery    INT NULL,
    id_forma_pago       INT NOT NULL,

    subtotal            DECIMAL(10,2) NOT NULL,
    descuento           DECIMAL(10,2) DEFAULT 0,
    id_cupon            INT NULL,
    envio               DECIMAL(8,2)  DEFAULT 0,
    total               DECIMAL(10,2) NOT NULL,

    nota_cliente        TEXT,                       -- "tocá el timbre del piso 2"
    nota_interna        TEXT,
    canal               VARCHAR(20) DEFAULT 'whatsapp',  -- whatsapp, web, telefono

    fecha_recibido      TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_pagado        TIMESTAMP NULL,
    fecha_en_cocina     TIMESTAMP NULL,
    fecha_listo         TIMESTAMP NULL,
    fecha_despachado    TIMESTAMP NULL,
    fecha_entregado     TIMESTAMP NULL,

    tiempo_estimado_min INT,                        -- snapshot al momento del pedido
    tiempo_real_min     INT,                        -- cuando se entrega real

    id_repartidor       INT NULL,

    INDEX (id_cliente, fecha_recibido),
    INDEX (id_estado, fecha_recibido),
    FOREIGN KEY (id_cliente)       REFERENCES clientes(id),
    FOREIGN KEY (id_estado)        REFERENCES pedidos_estados(id),
    FOREIGN KEY (id_tipo_entrega)  REFERENCES tipos_entrega(id),
    FOREIGN KEY (id_forma_pago)    REFERENCES formas_pago(id),
    FOREIGN KEY (id_zona_delivery) REFERENCES zonas_delivery(id),
    FOREIGN KEY (id_direccion)     REFERENCES clientes_direcciones(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Items del pedido
CREATE TABLE IF NOT EXISTS pedidos_items (
    id             INT AUTO_INCREMENT PRIMARY KEY,
    id_pedido      INT NOT NULL,
    id_producto    INT NOT NULL,
    id_tamanio     INT NULL,
    id_combo       INT NULL,
    nombre_snapshot VARCHAR(255),       -- snapshot del nombre al momento del pedido
    cantidad       INT NOT NULL DEFAULT 1,
    precio_unit    DECIMAL(10,2) NOT NULL,
    subtotal_item  DECIMAL(10,2) NOT NULL,
    nota_item      VARCHAR(255),         -- "sin cebolla", "bien doradita"
    FOREIGN KEY (id_pedido)    REFERENCES pedidos(id) ON DELETE CASCADE,
    FOREIGN KEY (id_producto)  REFERENCES productos(id),
    FOREIGN KEY (id_tamanio)   REFERENCES tamanios(id),
    FOREIGN KEY (id_combo)     REFERENCES combos(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Adicionales / ingredientes extra por item
CREATE TABLE IF NOT EXISTS pedidos_items_extras (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    id_pedido_item  INT NOT NULL,
    id_ingrediente  INT NOT NULL,
    precio_extra    DECIMAL(8,2),
    FOREIGN KEY (id_pedido_item) REFERENCES pedidos_items(id) ON DELETE CASCADE,
    FOREIGN KEY (id_ingrediente) REFERENCES ingredientes(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Repartidores
CREATE TABLE IF NOT EXISTS repartidores (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    nombre          VARCHAR(120) NOT NULL,
    telefono        VARCHAR(25),
    activo          TINYINT DEFAULT 1,
    en_servicio     TINYINT DEFAULT 0,    -- 1 si está disponible ahora
    pedidos_dia     INT DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Eventos del pedido (auditoría completa)
CREATE TABLE IF NOT EXISTS pedidos_eventos (
    id           INT AUTO_INCREMENT PRIMARY KEY,
    id_pedido    INT NOT NULL,
    tipo_evento  VARCHAR(40),       -- "creado", "pago_pendiente", "pago_ok", "en_cocina", "despachado", etc.
    detalle      TEXT,
    id_usuario   INT NULL,
    fecha        TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_pedido) REFERENCES pedidos(id) ON DELETE CASCADE,
    INDEX (id_pedido, fecha)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
