-- =============================================
-- TABLAS PARA INVENTARIO FÍSICO
-- Ejecutar en MySQL para agregar esta funcionalidad
-- =============================================

-- Tabla principal de inventarios físicos
CREATE TABLE IF NOT EXISTS inventarios_fisicos (
    id_inventario INT PRIMARY KEY AUTO_INCREMENT,
    codigo VARCHAR(20) NOT NULL UNIQUE,
    id_almacen INT NOT NULL,
    fecha_inicio DATETIME NOT NULL,
    fecha_fin DATETIME NULL,
    id_usuario_creador INT NOT NULL,
    id_usuario_cierre INT NULL,
    observaciones TEXT,
    estado ENUM('EN_PROCESO', 'FINALIZADO', 'AJUSTADO', 'CANCELADO') DEFAULT 'EN_PROCESO',
    total_productos INT DEFAULT 0,
    total_contados INT DEFAULT 0,
    total_diferencias INT DEFAULT 0,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_almacen) REFERENCES almacenes(id_almacen),
    FOREIGN KEY (id_usuario_creador) REFERENCES usuarios(id_usuario),
    FOREIGN KEY (id_usuario_cierre) REFERENCES usuarios(id_usuario)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Detalle del conteo de inventario
CREATE TABLE IF NOT EXISTS inventarios_fisicos_detalle (
    id_detalle INT PRIMARY KEY AUTO_INCREMENT,
    id_inventario INT NOT NULL,
    id_producto INT NOT NULL,
    stock_sistema DECIMAL(10,2) DEFAULT 0,
    cantidad_contada DECIMAL(10,2) DEFAULT 0,
    diferencia DECIMAL(10,2) DEFAULT 0,
    costo_unitario DECIMAL(10,2) DEFAULT 0,
    valor_diferencia DECIMAL(10,2) DEFAULT 0,
    observacion VARCHAR(255),
    fecha_conteo DATETIME NULL,
    id_usuario_conteo INT NULL,
    ajustado TINYINT(1) DEFAULT 0,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_inventario) REFERENCES inventarios_fisicos(id_inventario),
    FOREIGN KEY (id_producto) REFERENCES productos(id_producto),
    FOREIGN KEY (id_usuario_conteo) REFERENCES usuarios(id_usuario),
    UNIQUE KEY unique_inventario_producto (id_inventario, id_producto)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Índices para mejor rendimiento
CREATE INDEX idx_inventario_almacen ON inventarios_fisicos(id_almacen);
CREATE INDEX idx_inventario_estado ON inventarios_fisicos(estado);
CREATE INDEX idx_detalle_inventario ON inventarios_fisicos_detalle(id_inventario);
CREATE INDEX idx_detalle_producto ON inventarios_fisicos_detalle(id_producto);
