CREATE TABLE IF NOT EXISTS inventario_periodo (
    id_periodo_inventario INT AUTO_INCREMENT PRIMARY KEY,
    anio SMALLINT NOT NULL,
    descripcion VARCHAR(120) NOT NULL,
    fecha_corte DATE NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_inventario_periodo_anio (anio)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS inventario_formato (
    id_formato SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    codigo VARCHAR(10) NOT NULL,
    nombre VARCHAR(160) NOT NULL,
    descripcion VARCHAR(255) NULL,
    orden TINYINT NOT NULL DEFAULT 1,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    UNIQUE KEY uq_inventario_formato_codigo (codigo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO inventario_formato (codigo, nombre, descripcion, orden, estado) VALUES
('F1', 'Formato 1 - Maquinaria y equipo', 'Inventario fisico valorizado de bienes patrimoniales.', 1, 1),
('F2', 'Formato 2 - Altas', 'Altas de bienes del periodo inventariado.', 2, 1),
('F3', 'Formato 3 - Bajas', 'Bajas de bienes y datos contables.', 3, 1),
('F4', 'Formato 4 - Enseres', 'Registro de enseres institucionales.', 4, 1),
('F5', 'Formato 5 - Libros y textos', 'Inventario de bienes culturales, libros y textos.', 5, 1)
ON DUPLICATE KEY UPDATE
    nombre = VALUES(nombre),
    descripcion = VALUES(descripcion),
    orden = VALUES(orden),
    estado = VALUES(estado);

CREATE TABLE IF NOT EXISTS inventario_ambiente (
    id_ambiente_inventario INT AUTO_INCREMENT PRIMARY KEY,
    codigo VARCHAR(40) NULL,
    nombre VARCHAR(160) NOT NULL,
    descripcion VARCHAR(255) NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_inventario_ambiente_nombre (nombre),
    KEY idx_inventario_ambiente_codigo (codigo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS inventario_bien (
    id_bien BIGINT AUTO_INCREMENT PRIMARY KEY,
    id_periodo_inventario INT NOT NULL,
    id_formato SMALLINT UNSIGNED NOT NULL,
    id_ambiente_inventario INT NULL,
    item INT NULL,
    codigo_patrimonial VARCHAR(80) NULL,
    codigo_interno VARCHAR(80) NULL,
    denominacion VARCHAR(255) NOT NULL,
    marca VARCHAR(160) NULL,
    modelo VARCHAR(160) NULL,
    tipo VARCHAR(160) NULL,
    color VARCHAR(120) NULL,
    serie VARCHAR(180) NULL,
    dimensiones VARCHAR(180) NULL,
    cantidad DECIMAL(12,2) NOT NULL DEFAULT 1,
    unidad_medida VARCHAR(40) NOT NULL DEFAULT 'UNIDAD',
    estado_conservacion VARCHAR(120) NULL,
    condicion VARCHAR(120) NULL,
    observacion TEXT NULL,
    documento_ingreso VARCHAR(160) NULL,
    numero_documento VARCHAR(120) NULL,
    fecha_ingreso DATE NULL,
    valor_bien DECIMAL(14,2) NULL,
    ubicacion VARCHAR(180) NULL,
    responsable VARCHAR(180) NULL,
    nivel VARCHAR(80) NULL,
    grado VARCHAR(80) NULL,
    area VARCHAR(160) NULL,
    datos_origen LONGTEXT NULL,
    fuente_archivo VARCHAR(220) NULL,
    fuente_hoja VARCHAR(120) NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    CONSTRAINT fk_inventario_bien_periodo FOREIGN KEY (id_periodo_inventario) REFERENCES inventario_periodo(id_periodo_inventario),
    CONSTRAINT fk_inventario_bien_formato FOREIGN KEY (id_formato) REFERENCES inventario_formato(id_formato),
    CONSTRAINT fk_inventario_bien_ambiente FOREIGN KEY (id_ambiente_inventario) REFERENCES inventario_ambiente(id_ambiente_inventario) ON DELETE SET NULL,
    KEY idx_inventario_bien_periodo_formato (id_periodo_inventario, id_formato),
    KEY idx_inventario_bien_codigo_interno (codigo_interno),
    KEY idx_inventario_bien_codigo_patrimonial (codigo_patrimonial),
    KEY idx_inventario_bien_denominacion (denominacion),
    KEY idx_inventario_bien_estado (estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS inventario_movimiento (
    id_movimiento BIGINT AUTO_INCREMENT PRIMARY KEY,
    id_bien BIGINT NULL,
    id_periodo_inventario INT NOT NULL,
    id_formato SMALLINT UNSIGNED NOT NULL,
    tipo_movimiento VARCHAR(20) NOT NULL,
    fecha_movimiento DATE NULL,
    documento VARCHAR(160) NULL,
    numero_documento VARCHAR(120) NULL,
    motivo VARCHAR(255) NULL,
    cantidad DECIMAL(12,2) NOT NULL DEFAULT 1,
    valor_bien DECIMAL(14,2) NULL,
    datos_origen LONGTEXT NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_inventario_movimiento_bien FOREIGN KEY (id_bien) REFERENCES inventario_bien(id_bien) ON DELETE SET NULL,
    CONSTRAINT fk_inventario_movimiento_periodo FOREIGN KEY (id_periodo_inventario) REFERENCES inventario_periodo(id_periodo_inventario),
    CONSTRAINT fk_inventario_movimiento_formato FOREIGN KEY (id_formato) REFERENCES inventario_formato(id_formato),
    KEY idx_inventario_movimiento_periodo_tipo (id_periodo_inventario, tipo_movimiento),
    KEY idx_inventario_movimiento_fecha (fecha_movimiento)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS inventario_libro (
    id_libro BIGINT AUTO_INCREMENT PRIMARY KEY,
    id_bien BIGINT NOT NULL,
    codigo VARCHAR(80) NULL,
    titulo VARCHAR(255) NOT NULL,
    grado VARCHAR(80) NULL,
    autor VARCHAR(180) NULL,
    nivel VARCHAR(80) NULL,
    editorial VARCHAR(180) NULL,
    anio_edicion VARCHAR(20) NULL,
    estado_texto VARCHAR(80) NULL,
    cantidad_correlativa VARCHAR(80) NULL,
    valor_unitario DECIMAL(14,2) NULL,
    CONSTRAINT fk_inventario_libro_bien FOREIGN KEY (id_bien) REFERENCES inventario_bien(id_bien) ON DELETE CASCADE,
    KEY idx_inventario_libro_titulo (titulo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS inventario_importacion_log (
    id_importacion BIGINT AUTO_INCREMENT PRIMARY KEY,
    anio SMALLINT NOT NULL,
    fuente_archivo VARCHAR(220) NOT NULL,
    fuente_hoja VARCHAR(120) NOT NULL,
    formato_codigo VARCHAR(10) NOT NULL,
    registros INT NOT NULL DEFAULT 0,
    estado VARCHAR(30) NOT NULL DEFAULT 'IMPORTADO',
    detalle TEXT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    KEY idx_inventario_importacion_anio (anio),
    KEY idx_inventario_importacion_formato (formato_codigo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
