-- ============================================================
-- MIGRATION 001: Perbaikan hierarki wilayah
-- Cabang > Rayon > Ranting  --->  Cabang > Ranting > Rayon
--
-- CARA PAKAI:
--   mariadb -u USERNAME_DB -p NAMA_DATABASE < database/migration_001_fix_wilayah_hierarchy.sql
--
-- CATATAN PENTING:
-- Skrip ini akan MENGOSONGKAN ULANG tabel ranting & rayon (beserta
-- referensinya di anggota/users) karena arah relasinya dibalik total,
-- bukan sekadar tambah kolom. Cocok dipakai selama tahap awal
-- setup/testing seperti sekarang, SEBELUM data anggota sungguhan
-- banyak diinput. Kalau Anda sudah sempat input banyak data anggota
-- dan tidak mau hilang, STOP dulu — beri tahu saya isi tabel
-- ranting/rayon/anggota Anda saat ini, biar saya buatkan migrasi
-- yang mempertahankan data spesifik itu.
-- ============================================================

SET FOREIGN_KEY_CHECKS = 0;

-- Lepas referensi wilayah yang ada di anggota & users dulu, supaya aman
-- saat tabel ranting/rayon di-drop & dibuat ulang.
UPDATE anggota SET ranting_id = NULL, rayon_id = NULL;
UPDATE users SET ranting_id = NULL, rayon_id = NULL;

DROP TABLE IF EXISTS rayon;
DROP TABLE IF EXISTS ranting;

CREATE TABLE ranting (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  cabang_id INT UNSIGNED NOT NULL,
  nama VARCHAR(100) NOT NULL,
  created_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_ranting_cabang FOREIGN KEY (cabang_id) REFERENCES cabang(id) ON DELETE CASCADE,
  INDEX idx_ranting_cabang (cabang_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE rayon (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  ranting_id INT UNSIGNED NOT NULL,
  nama VARCHAR(100) NOT NULL,
  created_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT fk_rayon_ranting FOREIGN KEY (ranting_id) REFERENCES ranting(id) ON DELETE CASCADE,
  INDEX idx_rayon_ranting (ranting_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Re-seed data contoh (silakan hapus/ubah lewat menu Wilayah Organisasi setelah ini)
INSERT INTO ranting (id, cabang_id, nama) VALUES
  (1, 1, 'PACITAN'),
  (2, 1, 'PENDAPA PACITAN');

INSERT INTO rayon (id, ranting_id, nama) VALUES
  (1, 1, 'NANGGUNGAN');

SET FOREIGN_KEY_CHECKS = 1;

-- Setelah ini, buka menu "Wilayah Organisasi" di aplikasi untuk memasukkan
-- ulang Ranting/Rayon yang sudah pernah Anda buat sebelumnya (kalau ada),
-- lalu buka menu "Data Anggota" untuk memilih ulang wilayah pada baris
-- data anggota yang sempat kehilangan referensi Ranting/Rayon-nya.
