-- Seed del Módulo de Presupuesto para Entidades Públicas
-- Ejecutar tras crear el esquema con db_patch_budget.sql

-- 1. Crear Año Fiscal 2026
INSERT INTO budget.fiscal_years (id, year, status)
VALUES ('f2026a32-9fc1-4eb9-ea98-05f37f5d6e01', 2026, 'open')
ON CONFLICT (year) DO UPDATE
SET status = EXCLUDED.status;

-- 2. Crear Clasificadores Presupuestarios (Ingresos y Gastos)
-- Clasificadores de Ingresos
INSERT INTO budget.classifiers (id, code, name, type, parent_id, account_id, is_active)
VALUES
  ('c1000000-0000-0000-0000-000000000001', '1', 'Ingresos Corrientes', 'income', NULL, NULL, TRUE),
  ('c1000000-0000-0000-0000-000000000002', '1.1', 'Ingresos Tributarios (Impuestos)', 'income', 'c1000000-0000-0000-0000-000000000001', NULL, TRUE),
  ('c1000000-0000-0000-0000-000000000003', '1.2', 'Tasas, Multas y Contribuciones', 'income', 'c1000000-0000-0000-0000-000000000001', NULL, TRUE),
  ('c1000000-0000-0000-0000-000000000004', '1.3', 'Transferencias Gubernamentales Recibidas', 'income', 'c1000000-0000-0000-0000-000000000001', NULL, TRUE)
ON CONFLICT (code) DO UPDATE
SET name = EXCLUDED.name,
    parent_id = EXCLUDED.parent_id,
    type = EXCLUDED.type,
    is_active = EXCLUDED.is_active;

-- Clasificadores de Gastos (Mapeados a Cuentas Contables si existen)
INSERT INTO budget.classifiers (id, code, name, type, parent_id, account_id, is_active)
VALUES
  ('c2000000-0000-0000-0000-000000000001', '2', 'Gastos de Funcionamiento', 'expense', NULL, NULL, TRUE),
  -- Gastos de Personal (Mapeado a cuenta 5105 de personal)
  ('c2000000-0000-0000-0000-000000000002', '2.1', 'Gastos de Personal', 'expense', 'c2000000-0000-0000-0000-000000000001', 
   (SELECT id FROM chart_accounts WHERE code = '5105' LIMIT 1), TRUE),
  ('c2000000-0000-0000-0000-000000000003', '2.1.1', 'Sueldos y Salarios Personal de Planta', 'expense', 'c2000000-0000-0000-0000-000000000002', 
   (SELECT id FROM chart_accounts WHERE code = '5105' LIMIT 1), TRUE),
  ('c2000000-0000-0000-0000-000000000004', '2.1.2', 'Prestaciones Sociales y Pensiones', 'expense', 'c2000000-0000-0000-0000-000000000002', NULL, TRUE),
  -- Bienes y Servicios
  ('c2000000-0000-0000-0000-000000000005', '2.2', 'Adquisición de Bienes y Servicios', 'expense', 'c2000000-0000-0000-0000-000000000001', NULL, TRUE),
  ('c2000000-0000-0000-0000-000000000006', '2.2.1', 'Materiales y Suministros de Oficina', 'expense', 'c2000000-0000-0000-0000-000000000005', NULL, TRUE),
  ('c2000000-0000-0000-0000-000000000007', '2.2.2', 'Servicios Públicos e Infraestructura', 'expense', 'c2000000-0000-0000-0000-000000000005', NULL, TRUE),
  -- Gastos de Inversión
  ('c2000000-0000-0000-0000-000000000008', '3', 'Inversión Pública y Proyectos', 'expense', NULL, NULL, TRUE),
  ('c2000000-0000-0000-0000-000000000009', '3.1', 'Construcción y Obras Públicas', 'expense', 'c2000000-0000-0000-0000-000000000008', NULL, TRUE),
  ('c2000000-0000-0000-0000-000000000010', '3.2', 'Programas de Desarrollo Social', 'expense', 'c2000000-0000-0000-0000-000000000008', NULL, TRUE)
ON CONFLICT (code) DO UPDATE
SET name = EXCLUDED.name,
    parent_id = EXCLUDED.parent_id,
    type = EXCLUDED.type,
    account_id = COALESCE(EXCLUDED.account_id, budget.classifiers.account_id),
    is_active = EXCLUDED.is_active;

-- 3. Crear Unidades Organizacionales (Estructura Pública)
INSERT INTO budget.organizational_units (id, code, name, parent_id, is_active)
VALUES
  ('a1000000-0000-0000-0000-000000000001', '100', 'Despacho del Alcalde / Gerencia General', NULL, TRUE),
  ('a1000000-0000-0000-0000-000000000002', '200', 'Secretaría de Hacienda / Tesorería', NULL, TRUE),
  ('a1000000-0000-0000-0000-000000000003', '300', 'Secretaría de Infraestructura y Obras', NULL, TRUE),
  ('a1000000-0000-0000-0000-000000000004', '400', 'Dirección de Tecnología y Sistemas', NULL, TRUE)
ON CONFLICT (code) DO UPDATE
SET name = EXCLUDED.name,
    parent_id = EXCLUDED.parent_id,
    is_active = EXCLUDED.is_active;

-- 4. Formulación del Presupuesto (PIA) de Ejemplo para el Año Fiscal 2026
-- Dirección de Tecnología y Sistemas (400)
-- 2.2.1 Materiales y Suministros: $45,000.00
-- 2.1.1 Sueldos de Planta: $120,000.00
-- Secretaría de Hacienda (200)
-- 2.2.2 Servicios Públicos: $80,000.00
-- Secretaría de Obras (300)
-- 3.1 Construcción y Obras: $500,000.00
INSERT INTO budget.formulations (id, fiscal_year_id, org_unit_id, classifier_id, requested_amount, approved_amount, current_amount, status)
VALUES
  (gen_random_uuid(), 'f2026a32-9fc1-4eb9-ea98-05f37f5d6e01', 'a1000000-0000-0000-0000-000000000004', 'c2000000-0000-0000-0000-000000000006', 50000.00, 45000.00, 45000.00, 'approved'),
  (gen_random_uuid(), 'f2026a32-9fc1-4eb9-ea98-05f37f5d6e01', 'a1000000-0000-0000-0000-000000000004', 'c2000000-0000-0000-0000-000000000003', 130000.00, 120000.00, 120000.00, 'approved'),
  (gen_random_uuid(), 'f2026a32-9fc1-4eb9-ea98-05f37f5d6e01', 'a1000000-0000-0000-0000-000000000002', 'c2000000-0000-0000-0000-000000000007', 90000.00, 80000.00, 80000.00, 'approved'),
  (gen_random_uuid(), 'f2026a32-9fc1-4eb9-ea98-05f37f5d6e01', 'a1000000-0000-0000-0000-000000000003', 'c2000000-0000-0000-0000-000000000009', 600000.00, 500000.00, 500000.00, 'approved')
ON CONFLICT (fiscal_year_id, org_unit_id, classifier_id) DO UPDATE
SET requested_amount = EXCLUDED.requested_amount,
    approved_amount = EXCLUDED.approved_amount,
    current_amount = EXCLUDED.current_amount,
    status = EXCLUDED.status,
    updated_at = CURRENT_TIMESTAMP;
