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

class ControllerKoperasi extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->set_timezone();
        $this->load->library('encrypt');
        $this->load->library('form_validation');
        $this->load->library('Mycustom');
        $this->load->library('pdfgenerator');
        $this->load->library('Notifikasi');
        $this->load->model('bagian_notif/koperasi');
        $this->set_timezone();
    }
    public function set_timezone()
    {
        date_default_timezone_set("Asia/Jakarta");
    }
    public function index()
    {
        redirect('/');
    }
    public function notif($id)
    {
        $kd_rahasia                = $this->encrypt->decode($id);
        $pemecah                   = 'https://kspbinaartha.com';
        if ($kd_rahasia == $pemecah) :
            // Cek Tanggal Merah Minggu
            $hari_baru = $this->tanggalMerah(date('Y-m-d'));
            if ($hari_baru['hari_libur'] == 1) :
                $data = array(
                    'tgl_tempo' => $hari_baru['tgl_baru']
                );
                $this->db->where('tgl_tempo', date('Y-m-d'));
                $this->db->where('status_angsuran', 'BELUM');
                $this->db->update('p_koperasi_angsuran', $data);
            endif;
            // Hari -2 Pinjaman
            // Tagihan 2 Hari setalah hari ini
            $tgl_1hari = date('Y-m-d', strtotime('+' . 1 . 'day', strtotime(date('Y-m-d'))));
            $tgl_hari  = date('Y-m-d');
            // Notifikasi Pembayaran
            $this->_notif1hari($tgl_1hari);
            $this->_notifhari($tgl_hari);
            // Merubah status angsuran
            $this->_merubahStatusAngsuran();
            // Merubah Status Pinjaman
            $this->_merubahStatusKontrak();
        else :
            redirect('/');
        endif;
    }
    // Private Funtion
    // Notifikasi Pembayaran
    // Pembayaran -1 Hari
    private function _notif1hari($tgl_1hari)
    {
        $data_pinjaman = $this->koperasi->vdNotif1Hari($tgl_1hari);
        $this->_notifikasiPembayaran($data_pinjaman);
    }
    // Pembayaran Hari H
    private function _notifhari($tgl_hari)
    {
        $data_pinjaman = $this->koperasi->vdNotifHari($tgl_hari);
        $this->_notifikasiPembayaran($data_pinjaman);
    }
    // Merubah status pembayaran
    private function _merubahStatusAngsuran()
    {
        $tgl_terlambat = date('Y-m-d', strtotime('-' . 1 . 'day', strtotime(date('Y-m-d'))));
        $merubah_data = array(
            'status_angsuran' => 'MACET'
        );
        $this->db->where('status_angsuran', 'BELUM');
        $this->db->where('tgl_tempo', $tgl_terlambat);
        $this->db->update('p_koperasi_angsuran', $merubah_data);
    }
    private function _merubahStatusKontrak()
    {
        $cek_data = $this->koperasi->vd_macet_banyak();
        foreach ($cek_data as $Data_pinjaman) :
            if ($Data_pinjaman->jml_macet > 3) :
                $data_macet = array(
                    'status_kontrak' => 'MACET'
                );
                $this->db->where('id', $Data_pinjaman->kontrak_id);
                $this->db->update('p_koperasi_kontrak', $data_macet);
            endif;
        endforeach;
        die;
    }
    // Kode Notif
    private function _notifikasiPembayaran($data_pinjaman)
    {
        $opt = $this->db->get_where('sistem_option')->row_array();
        foreach ($data_pinjaman as $Data_pinjaman) :

            $cek_nomor = substr($Data_pinjaman->no_hp, 0, 1);
            if ($cek_nomor == 0) :
                $no_hp = '62' . substr($Data_pinjaman->no_hp, 1, 20);
            else :
                $no_hp = $Data_pinjaman->no_hp;
            endif;

            $pesan = 'Yth. *_pelanggan setia Koperasi Bina Artha Prima_*

Angsuran ' . $Data_pinjaman->angs_ke . '/' . $Data_pinjaman->tempo_pinjaman . ' a/n *_' . $Data_pinjaman->nm_anggota . '_* dengan nomor kontrak *_' . $Data_pinjaman->nomor_kontrak . '_* sebesar Rp ' . $Data_pinjaman->bsr_bayar . ',- akan jatuh tempo pada *' . date('d', strtotime($Data_pinjaman->tgl_tempo)) . ' ' . $this->mycustom->bulanIndo(date('m', strtotime($Data_pinjaman->tgl_tempo))) . ' ' . date('Y', strtotime($Data_pinjaman->tgl_tempo)) . '*. 

Silahkan melakukan pembayaran agar tidak terkena denda keterlambatan.
Terimakasih!


*Info Hub :* ' . $opt['cs_koperasi'] . '
*_PESAN OTOMATIS ROBIN_*';

            $body = array(
                "api_key" => $opt['api_koperasi'],
                "receiver" => $no_hp,
                "data" => array("message" => $pesan)
            );

            $curl = curl_init();
            curl_setopt_array($curl, [
                CURLOPT_URL => $opt['web_api_pesan'],
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "POST",
                CURLOPT_POSTFIELDS => json_encode($body),
                CURLOPT_HTTPHEADER => [
                    "Accept: */*",
                    "Content-Type: application/json",
                ],
            ]);

            curl_exec($curl);
            curl_error($curl);
            curl_close($curl);
        endforeach;
    }
    private function tanggalMerah($value)
    {
        $array = json_decode(file_get_contents("https://raw.githubusercontent.com/guangrei/APIHariLibur_V2/main/calendar.json"), true);
        //check tanggal merah berdasarkan libur nasional
        //check tanggal merah berdasarkan hari minggu
        if (date("D", strtotime($value)) === "Sun") :
            $data = array(
                'hari_libur' => 1,
                'tgl_baru'   => date('Y-m-d', strtotime('+' . 1 . ' days', strtotime($value)))
            );
        //check tanggal merah berdasarkan libur nasional
        elseif (isset($array[$value]) && $array[$value]["holiday"]) :
            $data = array(
                'hari_libur' => 2,
                'tgl_baru'   => date('Y-m-d', strtotime('+' . 1 . ' week', strtotime($value)))
            );
        //bukan tanggal merah
        else :
            $data = array(
                'hari_libur' => 0,
                'tgl_baru'   => $value
            );
        endif;
        if ($data['hari_libur'] == 1) :
            $tanggal_tempo = $value;
        elseif ($data['hari_libur'] == 2) :
            $tanggal_tempo = $value;
        endif;
        $data_angsuran = $this->db->get_where('p_koperasi_angsuran', ['tgl_tempo' => $value, 'status_angsuran' => 'BELUM'])->result();
        // echo '<pre>';
        // var_dump($data_angsuran);
        // die;
        return $data;


        // $cek_angsuran = $this->db->get_where('p_koperasi_angsuran', ['id' => htmlspecialchars($this->input->post('angs_id'))])->row_array();
        // $daftar_angsuran = $this->db->get_where('p_koperasi_angsuran', ['kontrak_id' => $cek_angsuran['kontrak_id']])->result();
        // $data_kontrak = $this->db->get_where('p_koperasi_kontrak', ['id' => $cek_angsuran['kontrak_id']])->row_array();
        // if ($data_kontrak['aturan_id'] == 1) :
        //     foreach ($daftar_angsuran as $Daftar_angsuran) :
        //         if ($Daftar_angsuran->id >= htmlspecialchars($this->input->post('angs_id'))) :
        //             $data = array(
        //                 'tgl_tempo'     => date('Y-m-d', strtotime('+' . 1 . ' week', strtotime($Daftar_angsuran->tgl_tempo)))
        //             );
        //             $this->db->where('id', $Daftar_angsuran->id);
        //             $this->db->update('p_koperasi_angsuran', $data);
        //         endif;
        //     endforeach;
        // elseif ($data_kontrak['aturan_id'] == 2):
        //     foreach ($daftar_angsuran as $Daftar_angsuran) :
        //         if ($Daftar_angsuran->id >= htmlspecialchars($this->input->post('angs_id'))) :
        //             $data = array(
        //                 'tgl_tempo'     => date('Y-m-d', strtotime('+' . 2 . ' week', strtotime($Daftar_angsuran->tgl_tempo)))
        //             );
        //             $this->db->where('id', $Daftar_angsuran->id);
        //             $this->db->update('p_koperasi_angsuran', $data);
        //         endif;
        //     endforeach;
        // elseif ($data_kontrak['aturan_id'] == 3):
        //     foreach ($daftar_angsuran as $Daftar_angsuran) :
        //         if ($Daftar_angsuran->id >= htmlspecialchars($this->input->post('angs_id'))) :
        //             $data = array(
        //                 'tgl_tempo'     => date('Y-m-d', strtotime('+' . 1 . ' month', strtotime($Daftar_angsuran->tgl_tempo)))
        //             );
        //             $this->db->where('id', $Daftar_angsuran->id);
        //             $this->db->update('p_koperasi_angsuran', $data);
        //         endif;
        //     endforeach;
        // elseif ($data_kontrak['aturan_id'] == 4):
        //     foreach ($daftar_angsuran as $Daftar_angsuran) :
        //         if ($Daftar_angsuran->id >= htmlspecialchars($this->input->post('angs_id'))) :
        //             $data = array(
        //                 'tgl_tempo'     => date('Y-m-d', strtotime('+' . $data_kontrak['tempo_pinjaman'] . ' month', strtotime($Daftar_angsuran->tgl_tempo)))
        //             );
        //             $this->db->where('id', $Daftar_angsuran->id);
        //             $this->db->update('p_koperasi_angsuran', $data);
        //         endif;
        //     endforeach;
        // elseif ($data_kontrak['aturan_id'] == 5):
        //     foreach ($daftar_angsuran as $Daftar_angsuran) :
        //         if ($Daftar_angsuran->id >= htmlspecialchars($this->input->post('angs_id'))) :
        //             $data = array(
        //                 'tgl_tempo'     => date('Y-m-d', strtotime('+' . 1 . ' month', strtotime($Daftar_angsuran->tgl_tempo)))
        //             );
        //             $this->db->where('id', $Daftar_angsuran->id);
        //             $this->db->update('p_koperasi_angsuran', $data);
        //         endif;
        //     endforeach;
        // elseif ($data_kontrak['aturan_id'] == 6):
        //     foreach ($daftar_angsuran as $Daftar_angsuran) :
        //         if ($Daftar_angsuran->id >= htmlspecialchars($this->input->post('angs_id'))) :
        //             $data = array(
        //                 'tgl_tempo'     => date('Y-m-d', strtotime('+' . 1 . ' month', strtotime($Daftar_angsuran->tgl_tempo)))
        //             );
        //             $this->db->where('id', $Daftar_angsuran->id);
        //             $this->db->update('p_koperasi_angsuran', $data);
        //         endif;
        //     endforeach;
        // endif;
    }
}

/* End of file ControllerKoperasi.php and path \application\controllers\notifikasi\ControllerKoperasi.php */