<?php

namespace App\Models;

use CodeIgniter\Model;
use App\Libraries\GeneralLib;

class ProvinsiModel extends Model
{
    protected $table      = 'geo_provinsi';
    protected $primaryKey = 'kode_provinsi';

    protected $useAutoIncrement = true;

    protected $returnType     = 'array';
    protected $useSoftDeletes = true;

    protected $allowedFields = ['kode_provinsi', 'nama_provinsi'];

    // Dates
    protected $useTimestamps = false;
    protected $dateFormat    = 'datetime';
    protected $createdField  = 'created_at';
    protected $updatedField  = 'updated_at';
    protected $deletedField  = 'deleted_at';

    // Validation
    protected $validationRules      = [];
    protected $validationMessages   = [];
    protected $skipValidation       = false;
    protected $cleanValidationRules = true;

    // Callbacks
    protected $allowCallbacks = true;
    protected $beforeInsert   = [];
    protected $afterInsert    = [];
    protected $beforeUpdate   = [];
    protected $afterUpdate    = [];
    protected $beforeFind     = [];
    protected $afterFind      = [];
    protected $beforeDelete   = [];
    protected $afterDelete    = [];

    public function GetDT($request)
    {
        $genlib = new GeneralLib();
        $db = db_connect();
        $builder = $db->table('geo_provinsi');
        
        $return_data = array();
        $return_data['draw'] = $request['draw'];

        $where = array();
        foreach($request['columns'] as $item){
            if (($item['searchable']=='true') && (!empty($item['search']['value'])))
            {
                $where[] = $item['data']." like '%".$item['search']['value']."%'";
            }
        }

        if (!empty($request['search']['value']))
        {
            $where = array();
            foreach($request['columns'] as $item){
                if (($item['searchable']=='true'))
                {
                    $where[] = $item['data']." like '%".$request['search']['value']."%'";
                }
            }
        }

        if(isset($request['searchBuilder']))
        {
            $filter = $genlib->dt_traverse_search_builder($request['searchBuilder']);
        }else{
            $filter = implode(" or ",$where);
        }
        //die(var_dump($filter));

        $order_by = $request['columns'][$request['order'][0]['column']]['data'];
        $order = $request['order'][0]['dir'];
        
        if (!empty($filter))
        {
            $data = $builder->where($filter)->orderBy($order_by, $order)->limit($request['start'],$request['length'])->get()->getResult();
        }else{
            $data = $builder->orderBy($order_by, $order)->limit($request['start'],$request['length'])->get()->getResult();
        }
        //die(var_dump($registrasi));
        $return_data['recordsTotal'] = $this->countAll();
        $return_data['recordsFiltered'] = count($data);
        $return_data['data'] = $data;

        return json_encode($return_data);
    }

    public function GetSelect($search, $page = 1, $extra_query = "")
    {
        $result['results'] = array();
        $result['pagination']['more'] = false;

        $query1 = "select kode_provinsi as 'id', nama_provinsi as 'text' from geo_provinsi where (1=1)";
        $query2 = "select count(kode_provinsi) as total from geo_provinsi where (1=1)";
        $subQuery = "";
        if (!empty($search))
        {
            $subQuery = " and ((nama_provinsi like '%".$search."%'))";
        }

        if ($subQuery != "")
        {
            $query1 .= $subQuery;
            $query2 .= $subQuery;
        }
        
        if (!empty($extra_query))
        {
            $query1 .= " and (".$extra_query.")";
            $query2 .= " and (".$extra_query.")";
        }

        $builder = $this->builder();
        $totalrow = $builder->countAll();

        $length = 10;
        $start = ($page - 1) * $length;

        $query1 .= " limit ".$start.",".$length;

        $db = $builder->db();
        $query = $db->query($query1);
        
        $data = $query->getResultArray();
        $result['results'] = $data;
        $result['pagination']['more'] = ($page * 10) < $totalrow;
        return $result;
    }
}
?>