<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class KartuKeluarga_model extends CI_Model {

    public function get_all() {
      $this->db->select('kk.*, w.nama_lengkap as nama_kepala_keluarga, w.no_hp as no_hp_kepala');
        $this->db->from('kartu_keluarga kk');
        $this->db->join('warga w', 'w.id = kk.kepala_keluarga_id', 'left');
        $this->db->order_by('kk.no_kk', 'ASC');
        return $this->db->get()->result();
    }

    public function get_by_id($id) {
        $this->db->select('kk.*, w.nama_lengkap as nama_kepala_keluarga');
        $this->db->from('kartu_keluarga kk');
        $this->db->join('warga w', 'w.id = kk.kepala_keluarga_id', 'left');
        $this->db->where('kk.id', $id);
        return $this->db->get()->row();
    }

    public function get_by_no_kk($no_kk) {
        $this->db->select('kk.*, w.nama_lengkap as nama_kepala_keluarga');
        $this->db->from('kartu_keluarga kk');
        $this->db->join('warga w', 'w.id = kk.kepala_keluarga_id', 'left');
        $this->db->where('kk.no_kk', $no_kk);
        return $this->db->get()->row();
    }

    /**
     * Ambil semua anggota keluarga termasuk yang meninggal.
     * Warga aktif diurutkan duluan, lalu yang meninggal di bawah.
     */
    public function get_anggota_keluarga($kk_id) {
        $this->db->select('warga.*');
        $this->db->from('warga');
        $this->db->where('warga.kk_id', $kk_id);
        // Aktif dulu, lalu meninggal; dalam masing-masing grup urut by hubungan
        $this->db->order_by('warga.status_meninggal', 'ASC');
        $this->db->order_by(
            'FIELD(warga.status_hubungan, "kepala_keluarga","istri","anak","cucu","orang_tua","mertua","famili_lain","pembantu","lainnya")',
            '', false
        );
        return $this->db->get()->result();
    }

    /**
     * Hanya ambil anggota yang masih hidup (aktif)
     */
    public function get_anggota_aktif($kk_id) {
        $this->db->select('warga.*');
        $this->db->from('warga');
        $this->db->where('warga.kk_id', $kk_id);
        $this->db->where('warga.status_meninggal', 0);
        $this->db->order_by(
            'FIELD(warga.status_hubungan, "kepala_keluarga","istri","anak","cucu","orang_tua","mertua","famili_lain","pembantu","lainnya")',
            '', false
        );
        return $this->db->get()->result();
    }

    /**
     * Hanya ambil anggota yang meninggal
     */
    public function get_anggota_meninggal($kk_id) {
        $this->db->select('warga.*');
        $this->db->from('warga');
        $this->db->where('warga.kk_id', $kk_id);
        $this->db->where('warga.status_meninggal', 1);
        $this->db->order_by('warga.tanggal_meninggal', 'DESC');
        return $this->db->get()->result();
    }

    public function count_anggota($kk_id) {
        $this->db->where('kk_id', $kk_id);
        return $this->db->count_all_results('warga');
    }

    /**
     * Hitung anggota yang masih hidup saja
     */
    public function count_anggota_aktif($kk_id) {
        $this->db->where('kk_id', $kk_id);
        $this->db->where('status_meninggal', 0);
        return $this->db->count_all_results('warga');
    }

    public function count_all() {
        return $this->db->count_all('kartu_keluarga');
    }

    /**
     * Hitung total warga meninggal di seluruh RT/RW
     */
    public function count_warga_meninggal() {
        $this->db->where('status_meninggal', 1);
        return $this->db->count_all_results('warga');
    }

    public function insert($data) {
        $this->db->insert('kartu_keluarga', $data);
        return $this->db->insert_id();
    }

    public function update($id, $data) {
        $this->db->where('id', $id);
        return $this->db->update('kartu_keluarga', $data);
    }

    public function delete($id) {
        // Lepas semua warga dari KK ini dulu
        $this->db->where('kk_id', $id);
        $this->db->update('warga', ['kk_id' => null, 'no_kk' => null]);

        $this->db->where('id', $id);
        return $this->db->delete('kartu_keluarga');
    }

    public function search_by_no_kk($keyword) {
        $this->db->select('kk.*, w.nama_lengkap as nama_kepala_keluarga');
        $this->db->from('kartu_keluarga kk');
        $this->db->join('warga w', 'w.id = kk.kepala_keluarga_id', 'left');
        $this->db->group_start();
            $this->db->like('kk.no_kk', $keyword);
            $this->db->or_like('w.nama_lengkap', $keyword);
        $this->db->group_end();
        $this->db->limit(10);
        return $this->db->get()->result();
    }
}