-- =============================================================================
-- 01 — CATÁLOGO: pizzas, sabores, ingredientes, combos, promos
-- Base: proyecto-pizzeria
-- =============================================================================

-- Categorías de productos: pizza, empanadas, pastas, postres, bebidas, etc.
CREATE TABLE IF NOT EXISTS categorias (
    id            INT AUTO_INCREMENT PRIMARY KEY,
    nombre        VARCHAR(60) NOT NULL,
    orden         INT DEFAULT 0,
    icono_emoji   VARCHAR(8),     -- 🍕 🥟 🍝 🥤 🍰
    activa        TINYINT DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO categorias (nombre, orden, icono_emoji) VALUES
    ('Pizzas',    1, '🍕'),
    ('Empanadas', 2, '🥟'),
    ('Pastas',    3, '🍝'),
    ('Postres',   4, '🍰'),
    ('Bebidas',   5, '🥤'),
    ('Combos',    6, '🎁');

-- Tamaños (aplica a pizzas principalmente)
CREATE TABLE IF NOT EXISTS tamanios (
    id     INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(40) NOT NULL,    -- ej. 'Personal', 'Mediana', 'Grande', 'XL'
    orden  INT DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO tamanios (nombre, orden) VALUES
    ('Personal', 1),
    ('Mediana',  2),
    ('Grande',   3),
    ('XL',       4);

-- Productos base (pizza muzzarella, pizza calabresa, empanada carne, etc.)
CREATE TABLE IF NOT EXISTS productos (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    id_categoria    INT NOT NULL,
    nombre          VARCHAR(120) NOT NULL,
    descripcion     TEXT,
    foto_url        VARCHAR(255),
    activo          TINYINT DEFAULT 1,
    tags_busqueda   VARCHAR(255),   -- palabras alt para que el agente encuentre: "muzza,musa,mozza"
    INDEX (id_categoria),
    FULLTEXT KEY ft_search (nombre, descripcion, tags_busqueda),
    FOREIGN KEY (id_categoria) REFERENCES categorias(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Precio por tamaño de cada producto
CREATE TABLE IF NOT EXISTS precios_productos (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    id_producto     INT NOT NULL,
    id_tamanio      INT NULL,           -- NULL si el producto no tiene tamaños (ej. una empanada)
    precio          DECIMAL(10,2) NOT NULL,
    precio_promo    DECIMAL(10,2) NULL, -- precio especial activo si hay promo
    UNIQUE KEY uniq_prod_tam (id_producto, id_tamanio),
    FOREIGN KEY (id_producto) REFERENCES productos(id) ON DELETE CASCADE,
    FOREIGN KEY (id_tamanio)  REFERENCES tamanios(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Ingredientes (para mostrar y para adicionales)
CREATE TABLE IF NOT EXISTS ingredientes (
    id         INT AUTO_INCREMENT PRIMARY KEY,
    nombre     VARCHAR(60) NOT NULL,
    es_extra   TINYINT DEFAULT 0,     -- 1 = se puede agregar como adicional
    precio_extra DECIMAL(8,2) DEFAULT 0,
    activo     TINYINT DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO ingredientes (nombre, es_extra, precio_extra) VALUES
    ('Doble queso',    1, 800),
    ('Aceitunas',      1, 400),
    ('Jamón',          1, 600),
    ('Morrón',         1, 300),
    ('Palmitos',       1, 700),
    ('Albahaca',       1, 200),
    ('Cebolla',        1, 200),
    ('Tomate fresco',  1, 300),
    ('Provolone',      1, 700);

-- Ingredientes que vienen DE FÁBRICA en cada producto (para mostrar al cliente)
CREATE TABLE IF NOT EXISTS productos_ingredientes (
    id_producto    INT NOT NULL,
    id_ingrediente INT NOT NULL,
    PRIMARY KEY (id_producto, id_ingrediente),
    FOREIGN KEY (id_producto)    REFERENCES productos(id)    ON DELETE CASCADE,
    FOREIGN KEY (id_ingrediente) REFERENCES ingredientes(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Combos / promos (pueden tener N productos)
CREATE TABLE IF NOT EXISTS combos (
    id             INT AUTO_INCREMENT PRIMARY KEY,
    nombre         VARCHAR(120) NOT NULL,
    descripcion    TEXT,
    precio         DECIMAL(10,2) NOT NULL,
    activo         TINYINT DEFAULT 1,
    horario_desde  TIME NULL,         -- ej. solo válido de 19 a 24
    horario_hasta  TIME NULL,
    dias_semana    VARCHAR(20) NULL,  -- ej. '1,2,3,4,5,6,0' (LMMJVSD)
    foto_url       VARCHAR(255)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS combos_items (
    id_combo       INT NOT NULL,
    id_producto    INT NOT NULL,
    id_tamanio     INT NULL,
    cantidad       INT NOT NULL DEFAULT 1,
    PRIMARY KEY (id_combo, id_producto, id_tamanio),
    FOREIGN KEY (id_combo)    REFERENCES combos(id)    ON DELETE CASCADE,
    FOREIGN KEY (id_producto) REFERENCES productos(id),
    FOREIGN KEY (id_tamanio)  REFERENCES tamanios(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Promos / cupones (códigos de descuento)
CREATE TABLE IF NOT EXISTS cupones (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    codigo          VARCHAR(40) UNIQUE NOT NULL,
    descripcion     VARCHAR(255),
    tipo_descuento  ENUM('porcentaje','monto_fijo','envio_gratis') NOT NULL,
    valor           DECIMAL(10,2) NOT NULL,
    fecha_desde     DATETIME,
    fecha_hasta     DATETIME,
    monto_minimo    DECIMAL(10,2) DEFAULT 0,
    max_usos_total  INT NULL,
    max_usos_cliente INT DEFAULT 1,
    activo          TINYINT DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
