-- Tablas para presupuestos mensuales de finanzas

CREATE TABLE IF NOT EXISTS presupuestos_mensuales (
    id INT AUTO_INCREMENT PRIMARY KEY,
    anio INT NOT NULL,
    mes INT NOT NULL,
    usuario_id INT NULL,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uniq_presupuesto_mes (anio, mes),
    KEY idx_usuario (usuario_id)
);

CREATE TABLE IF NOT EXISTS catalogo_presupuestos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL,
    tipo ENUM('GASTO','INGRESO') NOT NULL,
    categoria_id INT NULL,
    activo TINYINT(1) NOT NULL DEFAULT 1,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    KEY idx_tipo (tipo),
    KEY idx_categoria (categoria_id)
);

CREATE TABLE IF NOT EXISTS presupuestos_conceptos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    presupuesto_id INT NOT NULL,
    concepto VARCHAR(255) NOT NULL,
    tipo ENUM('GASTO','INGRESO') NOT NULL,
    categoria_id INT NULL,
    importe_previsto DECIMAL(12,2) NOT NULL DEFAULT 0,
    fecha_prevista DATE NULL,
    realizado TINYINT(1) NOT NULL DEFAULT 0,
    importe_real DECIMAL(12,2) NULL,
    fecha_real DATE NULL,
    creado_en TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    actualizado_en TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    KEY idx_presupuesto (presupuesto_id),
    KEY idx_tipo (tipo),
    KEY idx_categoria (categoria_id),
    CONSTRAINT fk_ppto_presupuesto FOREIGN KEY (presupuesto_id) REFERENCES presupuestos_mensuales(id) ON DELETE CASCADE
);

