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

class Pengumuman_model extends CI_Model {

    public function __construct() {
        parent::__construct();
    }

    // Get all pengumuman (untuk admin) dengan filter
    public function get_all($kategori = null, $bulan = null, $tahun = null) {
        $this->db->select('pengumuman.*, users.nama_lengkap as pembuat');
        $this->db->from('pengumuman');
        $this->db->join('users', 'users.id = pengumuman.dibuat_oleh', 'left');
        
        // Filter kategori
        if($kategori && $kategori != 'semua') {
            $this->db->where('pengumuman.kategori', $kategori);
        }
        
        // Filter bulan dan tahun
        if($bulan && $tahun) {
            $this->db->where('MONTH(pengumuman.tanggal_publish)', $bulan);
            $this->db->where('YEAR(pengumuman.tanggal_publish)', $tahun);
        } elseif($tahun) {
            $this->db->where('YEAR(pengumuman.tanggal_publish)', $tahun);
        }
        
        $this->db->order_by('pengumuman.tanggal_publish', 'DESC');
        $this->db->order_by('pengumuman.created_at', 'DESC');
        return $this->db->get()->result();
    }

    // Get pengumuman untuk warga (hanya yang publish dan sesuai role)
    public function get_for_warga($role, $kategori = null, $bulan = null, $tahun = null) {
        $this->db->select('pengumuman.*, users.nama_lengkap as pembuat');
        $this->db->from('pengumuman');
        $this->db->join('users', 'users.id = pengumuman.dibuat_oleh', 'left');
        $this->db->where('pengumuman.status', 'publish');
        $this->db->where('pengumuman.tanggal_publish <=', date('Y-m-d'));
        
        // Filter untuk role
        $this->db->group_start();
        $this->db->where('pengumuman.untuk_role', 'semua');
        $this->db->or_where('pengumuman.untuk_role', $role);
        $this->db->group_end();
        
        // Cek expired
        $this->db->group_start();
        $this->db->where('pengumuman.tanggal_expired >=', date('Y-m-d'));
        $this->db->or_where('pengumuman.tanggal_expired IS NULL');
        $this->db->group_end();
        
        // Filter kategori
        if($kategori && $kategori != 'semua') {
            $this->db->where('pengumuman.kategori', $kategori);
        }
        
        // Filter bulan dan tahun
        if($bulan && $tahun) {
            $this->db->where('MONTH(pengumuman.tanggal_publish)', $bulan);
            $this->db->where('YEAR(pengumuman.tanggal_publish)', $tahun);
        } elseif($tahun) {
            $this->db->where('YEAR(pengumuman.tanggal_publish)', $tahun);
        }
        
        $this->db->order_by('pengumuman.tanggal_publish', 'DESC');
        $this->db->order_by('pengumuman.created_at', 'DESC');
        return $this->db->get()->result();
    }

    public function get_by_id($id) {
        $this->db->select('pengumuman.*, users.nama_lengkap as pembuat');
        $this->db->from('pengumuman');
        $this->db->join('users', 'users.id = pengumuman.dibuat_oleh', 'left');
        $this->db->where('pengumuman.id', $id);
        return $this->db->get()->row();
    }

    // Get pengumuman terbaru untuk dashboard
    public function get_latest($limit = 5, $role = 'warga') {
        $this->db->select('pengumuman.*, users.nama_lengkap as pembuat');
        $this->db->from('pengumuman');
        $this->db->join('users', 'users.id = pengumuman.dibuat_oleh', 'left');
        $this->db->where('pengumuman.status', 'publish');
        $this->db->where('pengumuman.tanggal_publish <=', date('Y-m-d'));
        
        // Filter untuk role
        $this->db->group_start();
        $this->db->where('pengumuman.untuk_role', 'semua');
        $this->db->or_where('pengumuman.untuk_role', $role);
        $this->db->group_end();
        
        // Cek expired
        $this->db->group_start();
        $this->db->where('pengumuman.tanggal_expired >=', date('Y-m-d'));
        $this->db->or_where('pengumuman.tanggal_expired IS NULL');
        $this->db->group_end();
        
        $this->db->order_by('pengumuman.tanggal_publish', 'DESC');
        $this->db->limit($limit);
        return $this->db->get()->result();
    }

    // Get available years untuk filter
    public function get_available_years() {
        $this->db->select('DISTINCT YEAR(tanggal_publish) as tahun');
        $this->db->from('pengumuman');
        $this->db->where('tanggal_publish IS NOT NULL');
        $this->db->order_by('tahun', 'DESC');
        $query = $this->db->get();
        
        $years = array();
        foreach($query->result() as $row) {
            if($row->tahun) {
                $years[] = $row->tahun;
            }
        }
        
        // Jika kosong, tambahkan tahun sekarang
        if(empty($years)) {
            $years[] = date('Y');
        }
        
        return $years;
    }

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

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

    public function delete($id) {
        $this->db->where('id', $id);
        return $this->db->delete('pengumuman');
    }

    // Hitung pengumuman aktif
    public function count_active() {
        $this->db->where('status', 'publish');
        $this->db->where('tanggal_publish <=', date('Y-m-d'));
        $this->db->group_start();
        $this->db->where('tanggal_expired >=', date('Y-m-d'));
        $this->db->or_where('tanggal_expired IS NULL');
        $this->db->group_end();
        return $this->db->count_all_results('pengumuman');
    }
}