-- ===========================================================
-- AIR SDA - SEED DATA (Master Data + Contoh)
-- ===========================================================

-- 1. ROLE & PERMISSION
INSERT INTO role (kode, nama, deskripsi, level) VALUES
  ('SUPERADMIN', 'Super Administrator', 'Akses penuh seluruh sistem', 100),
  ('ADMIN_ORG', 'Administrator Organisasi', 'Admin satu organisasi/dinas', 90),
  ('SUPERVISOR', 'Supervisor / Pengawas', 'Approval inspeksi & laporan', 50),
  ('OPERATOR', 'Operator Data', 'Input dan kelola data bangunan', 30),
  ('PETUGAS_LAPANGAN', 'Petugas Lapangan', 'Pengumpulan data lapangan via Mode Lapangan', 10),
  ('VIEWER', 'Read-only', 'Hanya melihat data', 5)
ON CONFLICT (kode) DO NOTHING;

INSERT INTO permission (kode, nama, modul) VALUES
  ('bangunan.view', 'Lihat Bangunan', 'bangunan'),
  ('bangunan.create', 'Tambah Bangunan', 'bangunan'),
  ('bangunan.update', 'Edit Bangunan', 'bangunan'),
  ('bangunan.delete', 'Hapus Bangunan', 'bangunan'),
  ('bangunan.export', 'Export Bangunan', 'bangunan'),
  ('inspeksi.view', 'Lihat Inspeksi', 'inspeksi'),
  ('inspeksi.create', 'Catat Inspeksi', 'inspeksi'),
  ('inspeksi.approve', 'Approve Inspeksi', 'inspeksi'),
  ('inspeksi.reject', 'Reject Inspeksi', 'inspeksi'),
  ('layer.upload', 'Upload Layer GIS', 'layer'),
  ('layer.delete', 'Hapus Layer GIS', 'layer'),
  ('di.manage', 'Kelola Daerah Irigasi', 'daerah_irigasi'),
  ('user.manage', 'Kelola Pengguna', 'pengguna'),
  ('org.manage', 'Kelola Organisasi', 'organisasi'),
  ('audit.view', 'Lihat Audit Log', 'audit'),
  ('report.generate', 'Generate Laporan', 'laporan')
ON CONFLICT (kode) DO NOTHING;

-- Mapping role -> permission
WITH r AS (SELECT id, kode FROM role), p AS (SELECT id, kode FROM permission)
INSERT INTO role_permission (role_id, permission_id)
SELECT r.id, p.id FROM r, p WHERE
  (r.kode='SUPERADMIN') OR
  (r.kode='ADMIN_ORG' AND p.kode NOT IN ('org.manage')) OR
  (r.kode='SUPERVISOR' AND p.kode IN ('bangunan.view','bangunan.update','bangunan.export','inspeksi.view','inspeksi.approve','inspeksi.reject','report.generate','di.manage')) OR
  (r.kode='OPERATOR' AND p.kode IN ('bangunan.view','bangunan.create','bangunan.update','bangunan.export','inspeksi.view','inspeksi.create','layer.upload','report.generate')) OR
  (r.kode='PETUGAS_LAPANGAN' AND p.kode IN ('bangunan.view','bangunan.create','inspeksi.view','inspeksi.create')) OR
  (r.kode='VIEWER' AND p.kode IN ('bangunan.view','inspeksi.view','report.generate'))
ON CONFLICT DO NOTHING;

-- 2. KATEGORI & JENIS BANGUNAN
INSERT INTO kategori_bangunan (kode, nama, warna_default, geom_type) VALUES
  ('BANGUNAN', 'Bangunan', '#0891b2', 'POINT'),
  ('SALURAN', 'Saluran', '#f97316', 'LINESTRING'),
  ('PETAK', 'Petak Sawah', '#84cc16', 'POLYGON')
ON CONFLICT (kode) DO NOTHING;

INSERT INTO jenis_bangunan (kategori_id, kode, nama, deskripsi, ikon) VALUES
  -- BANGUNAN
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'BENDUNG', 'Bendung', 'Bangunan pengelak air sungai', 'dam'),
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'PINTU_AMBIL', 'Pintu Pengambilan', 'Pintu untuk mengambil air dari sungai/waduk', 'gate'),
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'PINTU_ATUR', 'Pintu Pengatur', 'Pintu pengatur debit aliran', 'gate'),
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'PINTU_KURAS', 'Pintu Penguras', 'Pintu untuk menguras sedimentasi', 'gate'),
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'GORONG', 'Gorong-gorong', 'Saluran bawah jalan/jembatan', 'tunnel'),
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'JEMBATAN', 'Jembatan', 'Jembatan irigasi', 'bridge'),
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'BANG_UKUR', 'Bangunan Ukur', 'Alat ukur debit', 'measure'),
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'TALANG', 'Talang', 'Saluran melayang', 'aqueduct'),
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'SIPON', 'Sipon', 'Saluran bawah halangan', 'tunnel'),
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'BANG_TERJUN', 'Bangunan Terjun', 'Penurunan elevasi air', 'waterfall'),
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'BANG_BAGI', 'Bangunan Bagi', 'Pembagi debit ke saluran', 'split'),
  ((SELECT id FROM kategori_bangunan WHERE kode='BANGUNAN'), 'BANG_SADAP', 'Bangunan Sadap', 'Pengambil air ke tersier', 'tap'),
  -- SALURAN
  ((SELECT id FROM kategori_bangunan WHERE kode='SALURAN'), 'SAL_PRIMER', 'Saluran Primer', 'Saluran utama dari sumber air', 'channel'),
  ((SELECT id FROM kategori_bangunan WHERE kode='SALURAN'), 'SAL_SEKUNDER', 'Saluran Sekunder', 'Cabang dari saluran primer', 'channel'),
  ((SELECT id FROM kategori_bangunan WHERE kode='SALURAN'), 'SAL_TERSIER', 'Saluran Tersier', 'Saluran pengairan petak', 'channel'),
  ((SELECT id FROM kategori_bangunan WHERE kode='SALURAN'), 'SAL_PEMBUANG', 'Saluran Pembuang', 'Drainase pembuangan air', 'channel'),
  -- PETAK
  ((SELECT id FROM kategori_bangunan WHERE kode='PETAK'), 'PETAK_TERSIER', 'Petak Tersier', 'Area pertanian dilayani tersier', 'field'),
  ((SELECT id FROM kategori_bangunan WHERE kode='PETAK'), 'PETAK_SAWAH', 'Petak Sawah', 'Petak sawah individu', 'field'),
  ((SELECT id FROM kategori_bangunan WHERE kode='PETAK'), 'PETAK_LAYANAN', 'Petak Layanan', 'Area layanan irigasi', 'field')
ON CONFLICT (kode) DO NOTHING;

-- 3. WILAYAH (contoh Jawa Barat)
INSERT INTO wilayah (kode_bps, nama, tingkat, parent_id) VALUES
  ('32', 'Jawa Barat', 'PROVINSI', NULL);

INSERT INTO wilayah (kode_bps, nama, tingkat, parent_id)
SELECT '32.06', 'Kabupaten Ciamis', 'KABUPATEN', id FROM wilayah WHERE kode_bps='32';

INSERT INTO wilayah (kode_bps, nama, tingkat, parent_id)
SELECT '32.06.10', 'Kecamatan Cikoneng', 'KECAMATAN', id FROM wilayah WHERE kode_bps='32.06';

INSERT INTO wilayah (kode_bps, nama, tingkat, parent_id)
SELECT '32.06.10.001', 'Desa Cihaur', 'DESA', id FROM wilayah WHERE kode_bps='32.06.10';

INSERT INTO wilayah (kode_bps, nama, tingkat, parent_id)
SELECT '32.06.10.002', 'Desa Cibatu', 'DESA', id FROM wilayah WHERE kode_bps='32.06.10';

-- 4. ORGANISASI CONTOH
INSERT INTO organisasi (id, kode, nama, tipe, alamat, kontak_email) VALUES
  ('11111111-1111-1111-1111-111111111111', 'BBWS-CIM', 'BBWS Citanduy', 'BBWS', 'Jl. Imam Bonjol No.20, Banjar', 'bbws.citanduy@pu.go.id'),
  ('22222222-2222-2222-2222-222222222222', 'DINAS-SDA-CMS', 'Dinas SDA Kab. Ciamis', 'DINAS_SDA', 'Jl. Ir.H.Juanda, Ciamis', 'sda@ciamiskab.go.id')
ON CONFLICT (kode) DO NOTHING;

-- 5. PENGGUNA CONTOH (password: airsda123, hash bcrypt placeholder)
INSERT INTO pengguna (organisasi_id, username, email, password_hash, nama_lengkap, nip, jabatan, role_id) VALUES
  ('11111111-1111-1111-1111-111111111111', 'superadmin', 'admin@airsda.id', '$2b$10$3kfM3vQF4Vg2HZ8YQzN8XO9rYJ1LpA5x6Bw7cD8eF9gH0iJ1kL2mN', 'Super Administrator', '197001012000031001', 'Administrator', (SELECT id FROM role WHERE kode='SUPERADMIN')),
  ('11111111-1111-1111-1111-111111111111', 'budi.santoso', 'budi@bbws.go.id', '$2b$10$3kfM3vQF4Vg2HZ8YQzN8XO9rYJ1LpA5x6Bw7cD8eF9gH0iJ1kL2mN', 'Ir. Budi Santoso', '198205152008011002', 'Kasubdit Operasi', (SELECT id FROM role WHERE kode='SUPERVISOR')),
  ('11111111-1111-1111-1111-111111111111', 'asep.hidayat', 'asep@bbws.go.id', '$2b$10$3kfM3vQF4Vg2HZ8YQzN8XO9rYJ1LpA5x6Bw7cD8eF9gH0iJ1kL2mN', 'Asep Hidayat', '199003202015011003', 'Juru Pengairan', (SELECT id FROM role WHERE kode='PETUGAS_LAPANGAN')),
  ('22222222-2222-2222-2222-222222222222', 'admin.ciamis', 'admin.ciamis@ciamiskab.go.id', '$2b$10$3kfM3vQF4Vg2HZ8YQzN8XO9rYJ1LpA5x6Bw7cD8eF9gH0iJ1kL2mN', 'Admin Dinas SDA Ciamis', '198501102010012001', 'Kepala Seksi', (SELECT id FROM role WHERE kode='ADMIN_ORG'))
ON CONFLICT (username) DO NOTHING;

-- 6. DAERAH IRIGASI CONTOH
INSERT INTO daerah_irigasi (id, organisasi_id, kode_di, nama, kewenangan, luas_potensial_ha, luas_fungsional_ha, sumber_air, wilayah_id) VALUES
  ('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', '11111111-1111-1111-1111-111111111111', 'DI-CIH-001', 'DI Cihaur', 'PUSAT', 1500, 1250, 'Sungai Cihaur', (SELECT id FROM wilayah WHERE kode_bps='32.06.10')),
  ('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', '11111111-1111-1111-1111-111111111111', 'DI-CTD-002', 'DI Citanduy', 'PUSAT', 3500, 2800, 'Sungai Citanduy', (SELECT id FROM wilayah WHERE kode_bps='32.06'))
ON CONFLICT (organisasi_id, kode_di) DO NOTHING;

-- 7. BANGUNAN CONTOH (dengan PostGIS geometry)
INSERT INTO bangunan (organisasi_id, kode, nama, jenis_id, daerah_irigasi_id, wilayah_desa_id, tahun_bangun, sumber_dana, geom, panjang_m, lebar_m, tinggi_m, material, debit_rencana, luas_layanan_ha, kondisi_saat_ini, persentase_kerusakan, tgl_inspeksi_terakhir, inspektor_terakhir, catatan, sumber_input) VALUES
  ('11111111-1111-1111-1111-111111111111', 'BD-001', 'Bendung Cihaur', (SELECT id FROM jenis_bangunan WHERE kode='BENDUNG'), 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', (SELECT id FROM wilayah WHERE kode_bps='32.06.10.001'), 1985, 'APBN', ST_SetSRID(ST_MakePoint(108.3445, -7.3105), 4326), 45, 12, 4.5, 'Beton Bertulang', 8.5, 1250, 'Baik', 5, '2026-03-15', 'Ir. Budi Santoso', 'Kondisi struktur baik, pintu air berfungsi normal.', 'manual'),
  ('11111111-1111-1111-1111-111111111111', 'SP-002', 'Saluran Primer Cibatu', (SELECT id FROM jenis_bangunan WHERE kode='SAL_PRIMER'), 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', (SELECT id FROM wilayah WHERE kode_bps='32.06.10.002'), 1985, 'APBN', ST_SetSRID(ST_GeomFromText('LINESTRING(108.3520 -7.3150, 108.3540 -7.3170, 108.3560 -7.3180)'), 4326), 2500, 3.5, 2.2, 'Pasangan Batu', 8.5, 1250, 'Rusak Ringan', 15, '2026-02-20', 'Asep Hidayat', 'Terdapat retak rambut di beberapa titik dinding.', 'manual'),
  ('11111111-1111-1111-1111-111111111111', 'GR-003', 'Gorong-gorong Kp.Pasir', (SELECT id FROM jenis_bangunan WHERE kode='GORONG'), 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', (SELECT id FROM wilayah WHERE kode_bps='32.06.10.002'), 1990, 'APBD', ST_SetSRID(ST_MakePoint(108.3560, -7.3180), 4326), 6, 1.5, 1.5, 'Beton', 2.1, 120, 'Rusak Sedang', 30, '2026-01-10', 'Asep Hidayat', 'Sedimentasi tinggi, beton pelapukan.', 'manual'),
  ('11111111-1111-1111-1111-111111111111', 'PA-004', 'Pintu Pengambilan Cihaur', (SELECT id FROM jenis_bangunan WHERE kode='PINTU_AMBIL'), 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', (SELECT id FROM wilayah WHERE kode_bps='32.06.10.001'), 1985, 'APBN', ST_SetSRID(ST_MakePoint(108.3450, -7.3108), 4326), 3, 2, 3, 'Baja', 8.5, 1250, 'Baik', 8, '2026-04-05', 'Ir. Budi Santoso', 'Pintu berfungsi normal.', 'manual'),
  ('11111111-1111-1111-1111-111111111111', 'BD-005', 'Bendung Citanduy Lama', (SELECT id FROM jenis_bangunan WHERE kode='BENDUNG'), 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', (SELECT id FROM wilayah WHERE kode_bps='32.06'), 1965, 'APBN', ST_SetSRID(ST_MakePoint(108.5430, -7.3680), 4326), 55, 14, 5, 'Beton', 12, 2800, 'Rusak Berat', 55, '2025-12-15', 'Dadang S.', 'Struktur retak besar, butuh rehabilitasi total.', 'manual'),
  ('11111111-1111-1111-1111-111111111111', 'PT-006', 'Petak Sawah Cibatu Blok-A', (SELECT id FROM jenis_bangunan WHERE kode='PETAK_TERSIER'), 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', (SELECT id FROM wilayah WHERE kode_bps='32.06.10.002'), 2000, 'APBD', ST_SetSRID(ST_GeomFromText('POLYGON((108.3500 -7.3145, 108.3520 -7.3145, 108.3520 -7.3160, 108.3500 -7.3160, 108.3500 -7.3145))'), 4326), NULL, NULL, NULL, NULL, NULL, 35, 'Baik', 0, NULL, NULL, 'Petak tersier blok A area 35 ha.', 'manual')
ON CONFLICT (organisasi_id, kode) DO NOTHING;

-- 8. RIWAYAT INSPEKSI
INSERT INTO inspeksi (bangunan_id, tanggal_inspeksi, inspektor_nama, kondisi, persentase_kerusakan, catatan, status_approval, lokasi_inspeksi)
SELECT b.id, b.tgl_inspeksi_terakhir, b.inspektor_terakhir, b.kondisi_saat_ini, b.persentase_kerusakan, b.catatan, 'APPROVED', b.centroid
FROM bangunan b
WHERE b.tgl_inspeksi_terakhir IS NOT NULL;

-- 9. PREFERENSI USER DEFAULT
INSERT INTO preferensi_pengguna (pengguna_id, warna_kategori, mode_warna)
SELECT id, '{"bangunan":"#0891b2","saluran":"#f97316","petak":"#84cc16"}'::JSONB, 'kondisi'
FROM pengguna
ON CONFLICT (pengguna_id) DO NOTHING;

-- ===========================================================
-- END SEED
-- ===========================================================
