-- Base de datos para TPV Hostelería
CREATE DATABASE IF NOT EXISTS tpv_hosteleria CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE tpv_hosteleria;

-- Tabla de Mesas
CREATE TABLE IF NOT EXISTS mesas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero INT NOT NULL UNIQUE,
    zona VARCHAR(50) NOT NULL,
    capacidad INT NOT NULL,
    estado ENUM('libre', 'ocupada', 'reservada') DEFAULT 'libre',
    pedido_activo INT NULL,
    fecha_ocupacion DATETIME NULL,
    INDEX idx_estado (estado),
    INDEX idx_zona (zona)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Categorías de Productos
CREATE TABLE IF NOT EXISTS categorias (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL UNIQUE,
    icono VARCHAR(50),
    orden INT DEFAULT 0,
    activo TINYINT(1) DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Productos
CREATE TABLE IF NOT EXISTS productos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(150) NOT NULL,
    descripcion TEXT,
    categoria_id INT NOT NULL,
    precio DECIMAL(10, 2) NOT NULL,
    precio_costo DECIMAL(10, 2),
    stock INT DEFAULT 0,
    disponible TINYINT(1) DEFAULT 1,
    requiere_preparacion TINYINT(1) DEFAULT 1,
    tiempo_preparacion INT DEFAULT 15,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (categoria_id) REFERENCES categorias(id) ON DELETE RESTRICT,
    INDEX idx_categoria (categoria_id),
    INDEX idx_disponible (disponible)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Pedidos (Comandas)
CREATE TABLE IF NOT EXISTS pedidos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    mesa_id INT NOT NULL,
    usuario_id INT NOT NULL,
    estado ENUM('pendiente', 'en_preparacion', 'listo', 'servido', 'pagado', 'cancelado') DEFAULT 'pendiente',
    total DECIMAL(10, 2) NOT NULL DEFAULT 0,
    nota_especial TEXT,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_cierre DATETIME NULL,
    FOREIGN KEY (mesa_id) REFERENCES mesas(id) ON DELETE RESTRICT,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE RESTRICT,
    INDEX idx_estado (estado),
    INDEX idx_mesa (mesa_id),
    INDEX idx_fecha (fecha_creacion)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Líneas de Pedido
CREATE TABLE IF NOT EXISTS lineas_pedido (
    id INT AUTO_INCREMENT PRIMARY KEY,
    pedido_id INT NOT NULL,
    producto_id INT NOT NULL,
    cantidad INT NOT NULL DEFAULT 1,
    precio_unitario DECIMAL(10, 2) NOT NULL,
    subtotal DECIMAL(10, 2) NOT NULL,
    estado_preparacion ENUM('pendiente', 'en_cocina', 'listo', 'servido', 'cancelado') DEFAULT 'pendiente',
    notas TEXT,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_servido DATETIME NULL,
    FOREIGN KEY (pedido_id) REFERENCES pedidos(id) ON DELETE CASCADE,
    FOREIGN KEY (producto_id) REFERENCES productos(id) ON DELETE RESTRICT,
    INDEX idx_pedido (pedido_id),
    INDEX idx_estado_prep (estado_preparacion)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Movimientos de Caja
CREATE TABLE IF NOT EXISTS movimientos_caja (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    pedido_id INT,
    tipo ENUM('venta', 'devolucion', 'gasto', 'apertura', 'cierre') DEFAULT 'venta',
    monto DECIMAL(10, 2) NOT NULL,
    metodo_pago ENUM('efectivo', 'tarjeta', 'transferencia', 'otro') DEFAULT 'efectivo',
    descripcion TEXT,
    fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE RESTRICT,
    FOREIGN KEY (pedido_id) REFERENCES pedidos(id) ON DELETE SET NULL,
    INDEX idx_fecha (fecha),
    INDEX idx_usuario (usuario_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de Sesiones (auditoría)
CREATE TABLE IF NOT EXISTS sesiones_usuario (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    token_sesion VARCHAR(255) NOT NULL UNIQUE,
    ip_address VARCHAR(45),
    fecha_inicio TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_fin DATETIME NULL,
    activa TINYINT(1) DEFAULT 1,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE,
    INDEX idx_usuario (usuario_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO mesas (numero, zona, capacidad) VALUES
(1, 'Comedor', 4),
(2, 'Comedor', 4),
(3, 'Comedor', 2),
(4, 'Terraza', 4),
(5, 'Terraza', 6),
(6, 'Barra', 2);

INSERT INTO categorias (nombre, icono, orden) VALUES
('Bebidas', '🥤', 1),
('Entrantes', '🍟', 2),
('Platos Principales', '🍗', 3),
('Postres', '🍰', 4),
('Café', '☕', 5);

INSERT INTO productos (nombre, descripcion, categoria_id, precio, precio_costo, disponible) VALUES
('Coca Cola', 'Bebida refrescante', 1, 2.50, 0.80, 1),
('Cerveza', 'Cerveza fría', 1, 3.00, 1.00, 1),
('Agua', 'Agua mineral', 1, 1.50, 0.30, 1),
('Patatas Fritas', 'Patatas crujientes', 2, 4.50, 1.50, 1),
('Alitas de Pollo', 'Alitas BBQ', 2, 6.00, 2.00, 1),
('Carne a la Parrilla', 'Filete 200g', 3, 12.00, 4.00, 1),
('Pasta Carbonara', 'Pasta italiana', 3, 10.00, 3.50, 1),
('Flan de Vainilla', 'Postre cremoso', 4, 4.00, 1.20, 1),
('Café Solo', 'Café expreso', 5, 1.50, 0.40, 1);
