<?php
class ControllerToolAraskargoCron extends Controller{

    use MngArasYurticiTrait;

    public function index(){

        //https://www.deercase.com/index.php?route=tool/araskargo_cron

        set_time_limit(-1);

        $shipping_result_satatus = array(
            '0' => 0, // Kargo kaydı açıldı
            '1' => 1, // Kargoya Verildi
            '2' => 2, // Teslim Edildi
            '3' => 3, // İade Edildi
        );

        $log = new Log("ArasKargoLogs.txt");

        $log->write("Çalıştı");


        $order_id = 0;
        if(isset($this->request->get['order_id'])){
            $order_id = $this->request->get['order_id'];
        }

        

        $this->load->model('checkout/order');

        if($order_id){
            $results = $this->db->query("SELECT * FROM ps_order_araskargo WHERE order_id = '". (int)$order_id ."' ")->rows;
        }else{
            $results = $this->db->query("SELECT * FROM ps_order_araskargo WHERE kargo_sonuc IN(0,1,3,4) AND kargo_tarih > '2022-11-10' ORDER BY RAND() ")->rows;
        }

        
        $date = " AND kargo_tarih BETWEEN '2022-11-10' AND  '2023-10-04' ";
        $sql = "SELECT * FROM ps_order_araskargo WHERE (kargo_sonuc = 0 OR kargo_sonuc = 1) ". $date;
        //echo $sql; die();
        //$results = $this->db->query($sql)->rows;

        //echo 1000000 + 428417; die();
        
        //$results = $this->db->query("SELECT * FROM ps_order_araskargo WHERE order_id = 428417 ")->rows;
        //var_dump($results); die();
        echo count($results) . ' Adet kargo işlenecektir. <br>';

       // die();

        foreach ($results as $key => $result){

            if($key >= 100){
                die();
            }

            $order = $this->model_checkout_order->getOrder($result['order_id']);
            //var_dump($order ); die();
            if($order){
                $sonuc = $this->ARAS_SONUC($order);
                $sonuc = json_decode($sonuc->GetQueryJSONResult, true);
                    //var_dump($sonuc); die();
                if($sonuc['QueryResult'] != NULL){
                    $query_result = $sonuc['QueryResult']['Cargo'];
                    
                    if(isset($query_result['DURUMU'])){

                        $step_query = $this->db->query("SELECT * FROM ps_order_araskargo_steps WHERE araskargo_id = '". $result['araskargo_id'] ."' AND status = '". $this->db->escape($query_result['DURUMU']) ."' ")->row;

                        if(!$step_query){

                            $this->db->query("INSERT INTO ps_order_araskargo_steps SET 
                                araskargo_id = '". $result['araskargo_id'] ."', 
                                order_id = '". $result['order_id'] ."', 
                                status = '". $this->db->escape($query_result['DURUMU']) ."', 
                                response = '". $this->db->escape(json_encode($query_result)) ."' ");


                            if($query_result['DURUMU'] == 'TESLİM EDİLDİ - NORMAL' OR $query_result['DURUMU'] == 'TESLİM EDİLDİ - YÖNLENDİRME'){
                                $kargo_url = $this->config->get('araskargo_takip_follow_link') . $query_result['MUSTERI_OZEL_KODU'];
                                $this->db->query("UPDATE ps_order_araskargo SET 
                                kargo_takipno = '". $this->db->escape($query_result['MUSTERI_OZEL_KODU']) ."', 
                                kargo_url = '". $this->db->escape($kargo_url) ."', 
                                kargo_sonuc = '2' WHERE araskargo_id = '".(int)$result['araskargo_id']."' ");
                                $this->addHistory($order, 'TESLİM EDİLDİ', true, $query_result);

                                echo $query_result['DURUMU'] . ' --> Order ID: ' .$result['order_id'] . "<br>";
                            }else if($query_result['DURUMU'] == 'TESLİMAT ŞUBESİNDE - NORMAL'){

                            }else if($query_result['DURUMU'] == 'TESLİMAT ŞUBESİNDE - YÖNLENDİRME'){

                            }else if($query_result['DURUMU'] == 'YOLDA - NORMAL'){

                                if($result['last_status'] != 'YOLDA'){
                                    $this->addHistory($order, 'YOLDA', true, $query_result);
                                }

                                $kargo_url = $this->config->get('araskargo_takip_follow_link') . $query_result['MUSTERI_OZEL_KODU'];
                                $this->db->query("UPDATE ps_order_araskargo SET last_status = 'YOLDA' WHERE araskargo_id = '".(int)$result['araskargo_id']."' ");

                                echo $query_result['DURUMU'] . ' --> Order ID: ' .$result['order_id'] . "<br>";

                            }else if($query_result['DURUMU'] == 'YOLDA - YÖNLENDİRME'){

                                if($result['last_status'] != 'YOLDA'){
                                    $this->addHistory($order, 'YOLDA', false, $query_result);
                                }

                                $this->db->query("UPDATE ps_order_araskargo SET last_status = 'YOLDA' WHERE araskargo_id = '".(int)$result['araskargo_id']."' ");
                                echo $query_result['DURUMU'] . ' --> Order ID: ' .$result['order_id'] . "<br>";

                            }else if($query_result['DURUMU'] == 'TESLİMATTA - NORMAL'){

                                if($result['last_status'] != 'TESLİMATTA'){
                                    $this->addHistory($order, 'TESLİMATTA', true, $query_result);
                                }

                                $this->db->query("UPDATE ps_order_araskargo SET last_status = 'TESLİMATTA' WHERE araskargo_id = '".(int)$result['araskargo_id']."' ");

                                echo $query_result['DURUMU'] . ' --> Order ID: ' .$result['order_id'] . "<br>";

                            }else if($query_result['DURUMU'] == 'ÇIKIŞ ŞUBESİNDE - NORMAL'){

                                if($result['last_status'] != 'ÇIKIŞ ŞUBESİNDE'){
                                    $this->addHistory($order, 'ÇIKIŞ ŞUBESİNDE', true, $query_result);
                                }

                                $kargo_url = $this->config->get('araskargo_takip_follow_link') . $query_result['MUSTERI_OZEL_KODU'];
                                $this->db->query("UPDATE ps_order_araskargo SET kargo_takipno = '". $this->db->escape($query_result['KARGO_TAKIP_NO']) ."', 
                                kargo_url = '". $this->db->escape($kargo_url) ."', last_status = 'ÇIKIŞ ŞUBESİNDE' WHERE araskargo_id = '".(int)$result['araskargo_id']."' ");

                                echo $query_result['DURUMU'] . ' --> Order ID: ' .$result['order_id'] . "<br>";
                                //Kargo takip linki al müşteriye bildir
                            }else{
                                //var_dump($query_result); die();
                            }
                        }
                    }else{
                        // Eğer kargoda iade yapıldıysa Webservis bu kargoya ait 2 data dönüyor. İlk datada Kargo Teslin edildi durumunu almak için else bloğu açıldı
                        if($query_result[0]){
                            //var_dump($result['order_id']); die();
                            if($query_result[0]['DURUMU'] == 'TESLİM EDİLDİ - NORMAL' OR $query_result[0]['DURUMU'] == 'TESLİM EDİLDİ - YÖNLENDİRME'){
                                $kargo_url = $this->config->get('araskargo_takip_follow_link') . $query_result[0]['MUSTERI_OZEL_KODU'];
                                $this->db->query("UPDATE ps_order_araskargo SET kargo_takipno = '". $this->db->escape($query_result[0]['KARGO_TAKIP_NO']) ."', 
                                kargo_url = '". $this->db->escape($kargo_url) ."', kargo_sonuc = '2' WHERE araskargo_id = '".(int)$result['araskargo_id']."' ");
                                $this->addHistory($order, 'TESLİM EDİLDİ', true, $query_result);
                                echo $query_result[0]['DURUMU'] . ' --> Order ID: ' .$result['order_id'] . "<br>";
                            }else if($query_result[0]['DURUMU'] == 'TESLİM EDİLDİ - İADE' OR $query_result[0]['DURUMU'] == 'TESLİMAT ŞUBESİNDE - İADE'){

                                $this->db->query("UPDATE ps_order_araskargo SET kargo_sonuc = '3' WHERE araskargo_id = '".(int)$result['araskargo_id']."' ");

                            }else if($query_result[0]['DURUMU'] == 'YOLDA - İADE'){

                            }else if($query_result[0]['DURUMU'] == 'TESLİMATTA - YÖNLENDİRME'){

                            }else if($query_result[0]['DURUMU'] == 'TESLİMAT ŞUBESİNDE - NORMAL'){

                            }else if($query_result[0]['DURUMU'] == 'TESLİMATTA - NORMAL'){

                            }else{
                                //var_dump($query_result); die();
                            }
                        }
                        // Eğer kargoda iade yapıldıysa Webservis bu kargoya ait 2 data dönüyor. İlk datada Kargo Teslin edildi durumunu almak için else bloğu açıldı
                    }



                }else{
                    echo "Hareket Yok " . $result['order_id'] . "<br>";
                    $this->db->query("UPDATE ps_order_araskargo SET kargo_sonuc = '4' WHERE araskargo_id = '".(int)$result['araskargo_id']."' ");
                }

            }else{
                $this->db->query("DELETE FROM ps_order_araskargo  WHERE araskargo_id = '".(int)$result['araskargo_id']."' ");
            }
        }

    }

    private function addHistory($order_info, $sonuc, $notify = false, $kargo_sonuc){

        if(isset($this->config->get('config_complete_status')[0])){
            $order_status_id = $this->config->get('config_complete_status')[0]; //Genel Ayarlardan ->Seçenek -> Tamamlanan Sipariş Durumlar alanundan sadece Tamamlandı seçilmesi gerek
        }else{
            $order_status_id = 0;
        }

        //var_dump($order_status_id); die();

        $this->load->model('checkout/order');

        $comment = "";

        if($sonuc == 'TESLİM EDİLDİ'){
            $comment = "Kargonuz Teslim Edilmiştir";
        }else if($sonuc == 'ÇIKIŞ ŞUBESİNDE'){
            $follow_url = $this->config->get('araskargo_takip_follow_link') . $kargo_sonuc['MUSTERI_OZEL_KODU'];
            $comment .= "Kargo Takip Linkiniz: <a target='_blank' href='". $follow_url ."'>" . $follow_url . "</a> <br>";
            $comment .= "Takip linkinden kargonuzun son hareketlerini takip edebilirsiniz.";
            $order_status_id = 17;

        }else if($sonuc == 'TESLİMATTA'){
            $comment .= "Kargonuz Teslimat Şubesindedir! <br>";
            $follow_url = $this->config->get('araskargo_takip_follow_link') . $kargo_sonuc['MUSTERI_OZEL_KODU'];
            $comment .= "Kargo Takip Linkiniz: <a target='_blank' href='". $follow_url ."'>" . $follow_url . "</a>";
            $order_status_id = 17;
        }else if($sonuc == 'YOLDA'){
            $comment .= "Kargonuz yoldadır! <br>";
            $follow_url = $this->config->get('araskargo_takip_follow_link') . $kargo_sonuc['MUSTERI_OZEL_KODU'];
            $comment .= "Kargo Takip Linkiniz: <a target='_blank' href='". $follow_url ."'>" . $follow_url . "</a>";
            $order_status_id = 17;
            $notify = true;
        }else{
            //$comment = "Kargo Takip Linkiniz: <a target='_blank' href='". $sonuc['link'] ."'>" . $sonuc['link'] . "</a> <br>";
            //$comment .= "Kargonuzu durumu: " . isset($sonuc['operationMessage']) ? $sonuc['operationMessage'] : ' Teslimat sürecindedir.';
        }

        if($order_status_id){
           $this->model_checkout_order->addOrderHistory($order_info['order_id'], $order_status_id, $comment, $notify, 1);
        }


    }

    public function cargoStatusInfo()
    {

        //https://www.deercase.com/index.php?route=tool/araskargo_cron/cargoStatusInfo&order_id=403465

        if(isset($this->request->get['order_id'])){
            $order_id = (int)$this->request->get['order_id'];

            $this->load->model('checkout/order');
            $result = $this->db->query("SELECT * FROM ps_order_araskargo WHERE order_id = '". $order_id ."'  ")->row;
            //var_dump($result); die();
            if ($result){
                $order = $this->model_checkout_order->getOrder($order_id);
                if($order){
                    $sonuc = $this->ARAS_SONUC($order);
                    $sonuc = json_decode($sonuc->GetQueryJSONResult, true);
                    echo "<pre>";
                    var_dump($sonuc); echo "</pre>"; die();
                }else{
                    echo "Sipariş bilgisi bulunamadı!";
                }
            }else{
                echo "KArgo bilgisi bulunamadı!";
            }

        }else{
            echo "Sipariş ID bulunamadı!";
        }

    }

    public function testCargo()
    {
        //https://www.deercase.com/index.php?route=tool/araskargo_cron/testCargo

        $this->load->model('checkout/order');
        $order = $this->model_checkout_order->getOrder(406456);

        $sonuc = $this->ARAS($order);

        var_dump($sonuc); die();
        

    }

    public function testCargoResult()
    {
        //https://www.deercase.com/index.php?route=tool/araskargo_cron/testCargoResult

        $this->load->model('checkout/order');
        $order = $this->model_checkout_order->getOrder(406455);

        $sonuc = $this->ARAS_SONUC($order);
        //$sonuc = $this->ARAS_TAKIPLINKI($order);

        var_dump($sonuc); die();
        

    }

    public function testBarcode()
    {
        //https://www.deercase.com/index.php?route=tool/araskargo_cron/testBarcode

        $this->load->model('checkout/order');
        $order = $this->model_checkout_order->getOrder(417897);

        $sonuc = $this->ARAS_GETBARCODE($order);

        var_dump($sonuc); die();
    }



}