-- =====================================================
-- TABLAS ADICIONALES - SISTEMA KARDEX
-- Transferencias entre almacenes
-- =====================================================

-- Tabla de transferencias (cabecera)
CREATE TABLE IF NOT EXISTS transferencias (
    id_transferencia INT PRIMARY KEY AUTO_INCREMENT,
    codigo VARCHAR(20) NOT NULL UNIQUE,
    id_almacen_origen INT NOT NULL,
    id_almacen_destino INT NOT NULL,
    id_usuario_crea INT NOT NULL,
    id_usuario_recibe INT NULL,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_recepcion DATETIME NULL,
    observaciones TEXT,
    estado ENUM('PENDIENTE', 'RECIBIDA', 'CANCELADA') DEFAULT 'PENDIENTE',
    FOREIGN KEY (id_almacen_origen) REFERENCES almacenes(id_almacen),
    FOREIGN KEY (id_almacen_destino) REFERENCES almacenes(id_almacen),
    FOREIGN KEY (id_usuario_crea) REFERENCES usuarios(id_usuario),
    FOREIGN KEY (id_usuario_recibe) REFERENCES usuarios(id_usuario)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabla de detalle de transferencias
CREATE TABLE IF NOT EXISTS transferencias_detalle (
    id_detalle INT PRIMARY KEY AUTO_INCREMENT,
    id_transferencia INT NOT NULL,
    id_producto INT NOT NULL,
    cantidad DECIMAL(10,2) NOT NULL,
    costo_unitario DECIMAL(10,2) DEFAULT 0,
    FOREIGN KEY (id_transferencia) REFERENCES transferencias(id_transferencia),
    FOREIGN KEY (id_producto) REFERENCES productos(id_producto)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Índices para mejorar rendimiento
CREATE INDEX idx_transferencias_estado ON transferencias(estado);
CREATE INDEX idx_transferencias_fecha ON transferencias(fecha_creacion);
CREATE INDEX idx_transferencias_origen ON transferencias(id_almacen_origen);
CREATE INDEX idx_transferencias_destino ON transferencias(id_almacen_destino);

-- =====================================================
-- NOTAS IMPORTANTES
-- =====================================================
-- 
-- 1. Las tablas de inventarios_fisicos ya deben estar creadas
--    (Ver sql_inventario_fisico.sql)
--
-- 2. Ejecutar este script después de crear las tablas base
--
-- 3. Las transferencias funcionan así:
--    - Al crear: Se descuenta stock del almacén origen
--    - Al recibir: Se agrega stock al almacén destino
--    - Al cancelar: Se devuelve stock al almacén origen
--
-- =====================================================
