<?php

namespace App\Controllers;

use App\Controllers\BaseController;

class JadwalController extends BaseController
{
    private $db;

    public function __construct()
    {
        $this->db = \Config\Database::connect();
    }

    public function index()
    {
        $data = [
            'title' => 'Kelola Jadwal Pengisian',
            'jadwal' => $this->db->table('jadwal_pengisian')->orderBy('created_at', 'DESC')->get()->getResultArray()
        ];
        return view('superadmin/jadwal/index', $data);
    }

    public function create()
    {
        $data = [
            'title' => 'Tambah Jadwal',
        ];
        return view('superadmin/jadwal/create', $data);
    }

    public function store()
    {
        $tahun = $this->request->getPost('tahun');
        $triwulan = $this->request->getPost('triwulan');
        $tanggal_mulai = $this->request->getPost('tanggal_mulai');
        $tanggal_selesai = $this->request->getPost('tanggal_selesai');
        $keterangan = $this->request->getPost('keterangan');

        // Simpan Jadwal
        $this->db->table('jadwal_pengisian')->insert([
            'tahun' => $tahun,
            'triwulan' => $triwulan,
            'tanggal_mulai' => $tanggal_mulai,
            'tanggal_selesai' => $tanggal_selesai,
            'keterangan' => $keterangan,
            'status' => 'Aktif',
            'created_at' => date('Y-m-d H:i:s')
        ]);

        // Kirim Notifikasi ke Semua OPD
        $this->sendNotificationToOPD($tahun, $triwulan, $tanggal_mulai, $tanggal_selesai);

        return redirect()->to('/jadwal')->with('success', 'Jadwal berhasil dibuat dan notifikasi telah dikirim ke OPD.');
    }

    public function delete($id)
    {
        $this->db->table('jadwal_pengisian')->where('id', $id)->delete();
        return redirect()->to('/jadwal')->with('success', 'Jadwal berhasil dihapus.');
    }

    private function sendNotificationToOPD($tahun, $triwulan, $start, $end)
    {
        // Ambil semua user dengan role OPD
        $opdUsers = $this->db->table('users')->where('role', 'opd')->get()->getResultArray();

        $judul = "Jadwal Pengisian Renja Triwulan $triwulan Tahun $tahun Dibuka";
        $pesan = "Pengisian laporan kinerja untuk Triwulan $triwulan Tahun $tahun telah dibuka mulai tanggal " . date('d M Y', strtotime($start)) . " sampai " . date('d M Y', strtotime($end)) . ". Mohon segera lengkapi laporan Anda.";

        $notifData = [];
        foreach ($opdUsers as $user) {
            $notifData[] = [
                'user_id' => $user['id'],
                'judul' => $judul,
                'pesan' => $pesan,
                'is_read' => 0,
                'created_at' => date('Y-m-d H:i:s')
            ];
        }

        if (!empty($notifData)) {
            $this->db->table('notifikasi')->insertBatch($notifData);
        }
    }
}
