<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class PaymentMakerChecker extends Model
{
    use SoftDeletes;

    protected $table = 'payments_maker_checker';

    public function application()
    {
        return $this->hasOne('App\ConsumerApplication','id','application_id');
    }

    public function avanseManualPayment(){
        return $this->hasMany('App\AvanseManualPayment','bulk_id','id')->orderBy('created_at', 'desc');
    }

    public static function pendingReconcile($data){
        $status = static::insertGetId($data);
        static::toSlack('Payment entry waiting for reconcile', json_decode($data['data']));
        return $status;
    }

    public static function reconcile($id, $data){
        $status = static::where('id',$id)->update($data);
        if ($reconcile = static::find($id)) {
            $paymentData = isset($reconcile->data) && isset($reconcile->data->application_id) ? json_decode($reconcile->data) : json_decode(json_encode(array_merge(json_decode($reconcile->data, 1), ['application_id' => $reconcile->application_id])));
//            static::toSlack('Payment reconciled successfully', $paymentData);
        }
        return $status;
    }

    public static function toSlack($title, $data){
        (new Slack(new Request(['title'=>$title,'fields'=> static::getSlackData($data),'group' => Slack::$PAYMENT_RECONCILIATION])))->send();
    }

    public static function getSlackData($data){

        $paidBy = '';
        $collectedBy = '';
        $bank = '';

        $modes = [1=>'Cash',2 =>'Cheque',3=>'NEFT',4=>'IMPS',5=>'UPI',6=>'Wallet'];
        $paid_by = isset($data->paid_by) ? $data->paid_by : 0;
        if ($paid_by) {
            $paidBy = User::find($paid_by);
        }
        $collected_by = isset($data->collected_by) ? $data->collected_by : 0;
        $collected_by_type = isset($data->collected_by_type) ? $data->collected_by_type : 1;
        if ($collected_by) {
            if ($collected_by_type == 1) {
                $collectedBy = User::find($collected_by);
            }else{
                $collectedBy = Merchant::where('id',$collected_by)->first(['id','merchant_name as name']);
            }
        }

        if (isset($data->bank_id)) {
           $bank = \App\LenderBank::where('id', $data->bank_id)->first(['bank_name']);
        }

        if (isset($data->application_id)){
            $application = ConsumerApplication::find($data->application_id);
        }

        return [
          'customer' => $application->name ? $application->name : '',
          'payment_type' =>  isset($data->payment_type) ? $data->payment_type : '',
          'mode' =>  isset($data->mode) && isset($modes[$data->mode]) ? $modes[$data->mode] : '',
          'paid_by' =>  isset($paidBy->name) ? $paidBy->name : '',
          'collected_by' =>  isset($collectedBy->name) ? $collectedBy->name : '',
          'bank' => isset($bank->bank_name) ? $bank->bank_name : '',
          'trasanction_id' =>  isset($data->trasanction_id) ? $data->trasanction_id : '',
          'wallet_name' =>  isset($data->wallet_name) ? $data->wallet_name : '',
          'payment_date' =>  isset($data->payment_date) ? $data->payment_date : '',
          'payment_reconciliation_date' =>  isset($data->payment_reconciliation_date) ? $data->payment_reconciliation_date : '',
          'fore_closure_date' =>  isset($data->fore_closure_date) ? $data->fore_closure_date : '',
          'amount' =>  isset($data->amount) ? $data->amount : '',
          'advance_amount' =>  isset($data->advance_amount) ? $data->advance_amount : '',
          'trasanction_acknowledgement' =>  isset($data->trasanction_acknowledgement) ? $data->trasanction_acknowledgement : '',
          'online_payment_id' =>  isset($data->online_payment_id) ? $data->online_payment_id : '',
          'application_link' => 'https://creditfair.in/admin/consumer-applications/edit/'.$data->application_id,
          'name' =>  Auth::user() ? ucwords(strtolower(Auth::user()->name)) : '',
        ];
    }
}
