<?php
namespace App\Lib;

use Illuminate\Support\Facades\Crypt;
use DB;
use App\Models\Customer as CustomerDB;
use App\Models\Customer_bank;
use OSS\OssClient;
use OSS\Core\OssException;

class Customer {
	var $bucket;
	var $ossClient;

	public function __construct() {
		$accessKeyId = env('ALIYUN_OSS_ACCESS_KEY_ID');
		$accessKeySecret = env('ALIYUN_OSS_ACCESS_KEY_SECRET');
		$endpoint = env('ALIYUN_OSS_ENDPOINT');
		$this->bucket = env('ALIYUN_OSS_BUCKET');
		try {
			$this->ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
		} catch (OssException $e) {
			print $e->getMessage();
		}
	}

    public function get_all() {
        return DB::table('customer')->get();
    }

    public function get_detail($id)
    {
        return DB::table('customer')
                ->where('id', $id)
                ->first();
    }

    public function get_detail_from_kode($code)
    {
        return DB::table('customer')
                ->where('code', $code)
                ->first();
    }

    public function approve_customer($id, $id_user, $type)
    {
		$cust = CustomerDB::where('id', $id)->first();
		$this->ossClient->deleteObject($this->bucket, env('ALIYUN_OSS_FOLDER') . '/tanda_pengenal/'.$cust->image_tanda_pengenal_old);
    	$data = [
            'is_ktp_bukutabungan_approved' => '1',
            'id_customer_type' => $type,
            'tanda_pengenal_old' => NULL,
            'image_tanda_pengenal_old' => NULL,
            'is_ktp_bukutabungan_approved_old' => NULL,
            'updated_at' => now()
        ];
        DB::table('customer')->where('id', $id)->update($data);

		$cust_bank = Customer_bank::where('id_customer', $id)->first();
		if(!empty($cust_bank->old_data)){
			$old_data = json_decode($cust_bank->old_data);
			$this->ossClient->deleteObject($this->bucket, env('ALIYUN_OSS_FOLDER') . '/buku_tabungan/'.$old_data->file);
		}
        $data = [
            'is_approved' => '1',
            'old_data' => NULL,
            'updated_at' => now()
        ];
        DB::table('customer_bank')->where('id_customer', $id)->update($data);

        $array_log = [
            'act' => 'update',
            'id_customer' => $id,
            'content' => json_encode($data),
            'id_users' => $id_user,
            'created_at' => now()
        ];
        DB::table('customer_log')->insertGetId($array_log);
    }

    public function reject_customer($id, $id_user, $reason)
    {
        $cust_bank = Customer_bank::where('id_customer', $id)->first();
        $cust = CustomerDB::where('id', $id)->first();

        $data_bank = [];
        $data = [];


        //if(!empty($cust->tanda_pengenal_old)) {
        //if(!empty($cust->image_tanda_pengenal) && $cust->image_tanda_pengenal != $cust->image_tanda_pengenal_old) $this->ossClient->deleteObject($this->bucket, env('ALIYUN_OSS_FOLDER') . '/tanda_pengenal/'.$cust->image_tanda_pengenal);

        // balikin data customer
        $data['tanda_pengenal'] = $cust->tanda_pengenal_old;
        $data['image_tanda_pengenal'] = $cust->image_tanda_pengenal_old;
        $data['tanda_pengenal_old'] = NULL;
        $data['image_tanda_pengenal_old'] = NULL;
        //}

        //if(!empty($cust_bank->old_data)) {
        $old_data = json_decode($cust_bank->old_data);

        if(!empty($cust_bank->old_data)) {
            //if(!empty($cust_bank->file) && $cust_bank->file != $old_data->file) $this->ossClient->deleteObject($this->bucket, env('ALIYUN_OSS_FOLDER') . '/buku_tabungan/'.$cust_bank->file);
            
            $data_bank['id_bank'] = $old_data->id_bank;
            $data_bank['nomor_rekening'] = $old_data->no_rek;
            $data_bank['nama_rekening'] = $old_data->nama_rek;
            $data_bank['file'] = $old_data->file;
            $data_bank['old_data'] = NULL;

            Customer_bank::where('id_customer', $id)->update($data_bank);
        }

        
        //}

        $data['is_ktp_bukutabungan_approved'] = $cust->is_ktp_bukutabungan_approved_old;
        $data['is_ktp_bukutabungan_approved_old'] = NULL;

        CustomerDB::where('id', $id)->update($data);


        $array_log = [
            'act' => 'update',
            'id_customer' => $id,
            'content' => json_encode(array_merge($data, $data_bank)),
            'id_users' => $id_user,
            'created_at' => now()
        ];
        DB::table('customer_log')->insertGetId($array_log);

        $data = [
            'id_customer' => $id,
            'id_user' => $id_user,
            'reason' => $reason,
            'status' => '2'
        ];
        DB::table('customer_reason')->insertGetId($data);
    }
}
