-- ============================================
-- TABLA: PEDIDOS DE CELULARES
-- Sistema de tracking de pedidos de equipos
-- Fecha: 2025
-- ============================================

USE sistema_kardex;

-- ============================================
-- TABLA PRINCIPAL: PEDIDOS_CELULARES
-- Almacena información individual de cada equipo pedido
-- ============================================
CREATE TABLE IF NOT EXISTS pedidos_celulares (
    id_pedido INT PRIMARY KEY AUTO_INCREMENT,
    
    -- Información del pedido
    numero_pedido VARCHAR(50) NOT NULL COMMENT 'Número de orden/pedido del proveedor',
    transaccion VARCHAR(100) COMMENT 'Código o ID de transacción',
    
    -- Información del equipo
    modelo VARCHAR(150) NOT NULL COMMENT 'Modelo del celular (ej: iPhone 15 Pro Max)',
    color VARCHAR(50) COMMENT 'Color del equipo',
    estado_equipo ENUM('NUEVO', 'SEMINUEVO', 'USADO', 'REACONDICIONADO') DEFAULT 'NUEVO' COMMENT 'Estado físico del equipo',
    estado_bateria VARCHAR(20) COMMENT 'Porcentaje o estado de batería (ej: 100%, 85%)',
    capacidad VARCHAR(20) COMMENT 'Capacidad de almacenamiento (ej: 128GB, 256GB, 512GB)',
    
    -- Costos
    costo_producto DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Costo del producto',
    costo_envio DECIMAL(10,2) DEFAULT 0.00 COMMENT 'Costo de envío',
    costo_total DECIMAL(10,2) GENERATED ALWAYS AS (costo_producto + costo_envio) STORED COMMENT 'Costo total calculado',
    
    -- Fechas
    fecha_llegada_lima DATE COMMENT 'Fecha estimada o real de llegada a Lima',
    
    -- Precios de venta
    precio_mayor DECIMAL(10,2) DEFAULT 0.00 COMMENT 'Precio de venta al por mayor',
    precio_menor DECIMAL(10,2) DEFAULT 0.00 COMMENT 'Precio de venta al por menor',
    
    -- Ganancias calculadas
    ganancia_mayor DECIMAL(10,2) GENERATED ALWAYS AS (precio_mayor - (costo_producto + costo_envio)) STORED COMMENT 'Ganancia por mayor',
    ganancia_menor DECIMAL(10,2) GENERATED ALWAYS AS (precio_menor - (costo_producto + costo_envio)) STORED COMMENT 'Ganancia por menor',
    
    -- Estado del pedido
    estado_pedido ENUM('PENDIENTE', 'EN_TRANSITO', 'EN_ADUANA', 'RECIBIDO', 'EN_STOCK', 'VENDIDO', 'DEVUELTO', 'CANCELADO') DEFAULT 'PENDIENTE',
    
    -- Relaciones opcionales
    id_proveedor INT NULL COMMENT 'Proveedor del equipo',
    id_producto INT NULL COMMENT 'Producto relacionado en el sistema',
    id_almacen INT NULL COMMENT 'Almacén donde se recibe',
    id_venta INT NULL COMMENT 'Venta relacionada si ya fue vendido',
    
    -- IMEI y serial (únicos por equipo)
    imei VARCHAR(20) UNIQUE COMMENT 'IMEI del equipo (único)',
    serial VARCHAR(50) COMMENT 'Número de serie',
    
    -- Observaciones
    observaciones TEXT,
    
    -- Auditoría
    id_usuario_crea INT NOT NULL,
    id_usuario_modifica INT NULL,
    estado TINYINT(1) DEFAULT 1,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_modificacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    -- Claves foráneas
    FOREIGN KEY (id_proveedor) REFERENCES proveedores(id_proveedor) ON DELETE SET NULL,
    FOREIGN KEY (id_producto) REFERENCES productos(id_producto) ON DELETE SET NULL,
    FOREIGN KEY (id_almacen) REFERENCES almacenes(id_almacen) ON DELETE SET NULL,
    FOREIGN KEY (id_venta) REFERENCES ventas(id_venta) ON DELETE SET NULL,
    FOREIGN KEY (id_usuario_crea) REFERENCES usuarios(id_usuario),
    FOREIGN KEY (id_usuario_modifica) REFERENCES usuarios(id_usuario) ON DELETE SET NULL,
    
    -- Índices para búsquedas
    INDEX idx_numero_pedido (numero_pedido),
    INDEX idx_modelo (modelo),
    INDEX idx_estado_pedido (estado_pedido),
    INDEX idx_fecha_llegada (fecha_llegada_lima),
    INDEX idx_imei (imei),
    INDEX idx_fecha_creacion (fecha_creacion)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Registro de pedidos de celulares con tracking de costos y ganancias';

-- ============================================
-- INSERTAR MÓDULO EN EL SISTEMA
-- ============================================
INSERT INTO modulos (codigo, nombre, descripcion, icono, orden, estado) VALUES
('PEDIDOS_CEL', 'Pedidos Celulares', 'Gestión de pedidos y tracking de celulares importados', 'fa-mobile-alt', 8, 1)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre), descripcion = VALUES(descripcion);

-- Obtener el ID del módulo
SET @id_modulo_pedidos = (SELECT id_modulo FROM modulos WHERE codigo = 'PEDIDOS_CEL');

-- ============================================
-- INSERTAR PERMISOS PARA EL MÓDULO
-- ============================================
INSERT INTO permisos (id_modulo, codigo, nombre, descripcion, tipo_permiso, estado) VALUES
(@id_modulo_pedidos, 'PEDIDOS_CEL_LEER', 'Ver Pedidos Celulares', 'Permite ver la lista de pedidos de celulares', 'LEER', 1),
(@id_modulo_pedidos, 'PEDIDOS_CEL_CREAR', 'Crear Pedido Celular', 'Permite registrar nuevos pedidos de celulares', 'CREAR', 1),
(@id_modulo_pedidos, 'PEDIDOS_CEL_EDITAR', 'Editar Pedido Celular', 'Permite modificar pedidos de celulares existentes', 'EDITAR', 1),
(@id_modulo_pedidos, 'PEDIDOS_CEL_ELIMINAR', 'Eliminar Pedido Celular', 'Permite eliminar pedidos de celulares', 'ELIMINAR', 1),
(@id_modulo_pedidos, 'PEDIDOS_CEL_EXPORTAR', 'Exportar Pedidos Celulares', 'Permite exportar la lista de pedidos a Excel/PDF', 'EXPORTAR', 1),
(@id_modulo_pedidos, 'PEDIDOS_CEL_IMPRIMIR', 'Imprimir Pedido Celular', 'Permite imprimir detalles del pedido', 'IMPRIMIR', 1)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre), descripcion = VALUES(descripcion);

-- ============================================
-- ASIGNAR PERMISOS AL ROL ADMINISTRADOR
-- ============================================
INSERT INTO roles_permisos (id_rol, id_permiso)
SELECT 
    r.id_rol, 
    p.id_permiso
FROM roles r
CROSS JOIN permisos p
WHERE r.codigo = 'ADMIN' 
  AND p.codigo LIKE 'PEDIDOS_CEL_%'
ON DUPLICATE KEY UPDATE fecha_asignacion = NOW();

-- ============================================
-- VISTA PARA LISTAR PEDIDOS CON INFORMACIÓN COMPLETA
-- ============================================
CREATE OR REPLACE VIEW vista_pedidos_celulares AS
SELECT 
    pc.id_pedido,
    pc.numero_pedido,
    pc.transaccion,
    pc.modelo,
    pc.color,
    pc.estado_equipo,
    pc.estado_bateria,
    pc.capacidad,
    pc.costo_producto,
    pc.costo_envio,
    pc.costo_total,
    pc.fecha_llegada_lima,
    pc.precio_mayor,
    pc.precio_menor,
    pc.ganancia_mayor,
    pc.ganancia_menor,
    pc.estado_pedido,
    pc.imei,
    pc.serial,
    pc.observaciones,
    pc.fecha_creacion,
    pc.fecha_modificacion,
    prov.razon_social AS proveedor_nombre,
    prov.numero_documento AS proveedor_documento,
    alm.nombre AS almacen_nombre,
    CONCAT(u.nombre, ' ', u.apellido) AS usuario_crea_nombre,
    CASE 
        WHEN pc.estado_pedido = 'VENDIDO' THEN 'success'
        WHEN pc.estado_pedido = 'EN_STOCK' THEN 'info'
        WHEN pc.estado_pedido = 'RECIBIDO' THEN 'primary'
        WHEN pc.estado_pedido IN ('EN_TRANSITO', 'EN_ADUANA') THEN 'warning'
        WHEN pc.estado_pedido IN ('DEVUELTO', 'CANCELADO') THEN 'danger'
        ELSE 'secondary'
    END AS badge_class
FROM pedidos_celulares pc
LEFT JOIN proveedores prov ON pc.id_proveedor = prov.id_proveedor
LEFT JOIN almacenes alm ON pc.id_almacen = alm.id_almacen
LEFT JOIN usuarios u ON pc.id_usuario_crea = u.id_usuario
WHERE pc.estado = 1;

-- ============================================
-- MENSAJE DE CONFIRMACIÓN
-- ============================================
SELECT 'Tabla pedidos_celulares creada exitosamente' AS mensaje;
SELECT COUNT(*) AS permisos_creados FROM permisos WHERE codigo LIKE 'PEDIDOS_CEL_%';
