<?php

namespace lib\Controllers\Client;

use lib\Models\AddDbModel;
use lib\Models\ClientModel;

class PaymentController extends ClientController
{
    public function __construct(array $params = [])
    {
        parent::__construct($params);
        $this->setPath('payment');
    } //

    //청구서, depositbillpaper.php 
    //CLI 접속방법 : php index.php site/client/payment/billpaper
    //WEB 접속방법 : http://localhostsite/client/payment/billpaper
    public function billpaper()
    {
        $sitekey = $this->request->get('sitekey');
        if (!$sitekey) {
            throw new \Exception("sitekey 값이 정의되지 않았습니다.");
        }
        $this->siteInfo = DBMS_SITEINFOS[$sitekey];
        //기본적으로 필요한  client_code, mkid, service_code를 설정합니다.
        list($client_code, $member_code, $service_code) = $this->setDefaultRequestData();
        return $this->render(__FUNCTION__);
    }
    //미납리스트트, NonPaymentList.php 
    //CLI 접속방법 : php index.php site/client/payment/index
    //WEB 접속방법 : http://localhostsite/client/payment/index
    public function index()
    {
        //Client_Code = ["C219"=>WinIDC,"C116"=>IDC-JP"] -> 미지급금계산 제외 Client_Code
        $exclude_clients = ['C116', 'C219'];
        //mode 당일,1일전,2일전,3일전,custom
        $today = date("Y-m-d");;
        $mode = $this->request->get('mode', 'all');
        switch ($mode) {
            case 'today':
                $this->message = "[{$today}] 기준 당일 ";
                $this->getServiceService()->getModel()->where("service_payment_date = CURDATE()");
                break;
            case '1day':
                $nonpaymentDay = 1;
                $this->message = "[{$today}] 기준 {$nonpaymentDay}일전";
                $this->getServiceService()->getModel()->where("service_payment_date = Date_Add(CURDATE(),INTERVAL {$nonpaymentDay} DAY)");
                break;
            case '2day':
                $nonpaymentDay = 2;
                $this->message = "[{$today}] 기준 {$nonpaymentDay}일전";
                $this->getServiceService()->getModel()->where("service_payment_date = Date_Add(CURDATE(),INTERVAL {$nonpaymentDay} DAY)");
                break;
            case '3day':
                $nonpaymentDay = 3;
                $this->message = "[{$today}] 기준 {$nonpaymentDay}일전";
                $this->getServiceService()->getModel()->where("service_payment_date = Date_Add(CURDATE(),INTERVAL {$nonpaymentDay} DAY)");
                break;
            case 'all':
            default:
                $this->message = "[{$today}] 기준 전체";
                break;
        }
        $this->mode    = $mode;

        $table = $this->getServiceService()->getModel()->getTable();
        $clientTable = ClientModel::TABLE;
        $addDbTable = AddDbModel::TABLE;
        $this->getServiceService()->getModel()->select("{$clientTable}.Client_Name,{$table}.service_code,service_line,server_code,service_ip,service_payment_date,service_amount,service_nonpayment,service_note,addDB_case,addDB_nonpayment,addDB_payment,addDB_accountStatus,addDB_ip,addDB_payment_date");
        $this->getServiceService()->getModel()->join($clientTable, "{$table}.client_code = {$clientTable}.Client_Code");
        $this->getServiceService()->getModel()->join($addDbTable, "{$table}.service_code = {$addDbTable}.service_code");
        $this->getServiceService()->getModel()->whereNotIn("{$addDbTable}.client_code", $exclude_clients);
        $this->getServiceService()->getModel()->whereNotIn("{$addDbTable}.addDB_accountStatus", ["complete"]);
        $this->getServiceService()->getModel()->orderBy("service_payment_date", "DESC");
        [$this->total, $this->entities, $this->pagination, $this->curPage, $this->perPage] = $this->getServiceService()->getList(
            $this->request->get('curPage'),
            $this->request->get('perPage')
        );
        return $this->render(__FUNCTION__);
    }
} //Class
