<?php
namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;

use App\Lib\Lakuemas;
use App\Lib\Lakuemas_tx;
use App\Libs\Average_sell_price_lib;
use App\Jobs\SendEmailRejectJualJob;

class Notification_jualController extends Controller
{
    public function doAction(Request $request) 
    {
        $array_validate = [
            'id' => 'required',
            'pin' => 'required',
            'status' => 'required'
        ];
        $request->validate($array_validate);

        $id = request('id');
        $pin = request('pin');
        $status = request('status');
        $data_user = Auth::user();

        if($data_user->pin != $pin) {
            $return["message"] = "PIN tidak Sesuai";
            $return["errors"]["pin"][0] = "PIN tidak sesuai";
            return response()->json($return, 422);
        }
        else {
            /*
                1.  Update Tx Status => 1
            */

            $class_lakuemas_tx = new Lakuemas_tx;
            $class_lakuemas_tx->update_tx_status_jual($data_user->id, $id, '1');

            if($status == '1') {
                /*
                    2.  Send email notification
                */

                $return['success'] = '1';
                return response()->json($return, 200);
            }

            else if($status == '2') {
                /*
                    2.  Insert TX Retur
                    3.  Insert Tabungan Tx Retur
                    4.  Balikin Saldo
                    5.  Send email notification
                */

                $class_lakuemas = new Lakuemas;

                $txcode = $class_lakuemas_tx->generate_txcode();
                $data_kurs = get_kurs();

                $detail_tx = $class_lakuemas_tx->get_detail($id);
                $saldo_akhir = bcadd($detail_tx->saldo, $detail_tx->debet, 4);

                $id_tx = $class_lakuemas_tx->create_tx_lakuemas($txcode, $detail_tx->id_customer, $detail_tx->id_tabungan, '2', '1', NULL, $data_user->id);

                $class_lakuemas_tx->insert_tabungan_tx(
                    $id_tx, 
                    $detail_tx->id_tabungan, 
                    $detail_tx->debet,
                    '',
                    '', 
                    $data_kurs->harga_beli, 
                    $data_kurs->harga_jual, 
                    $detail_tx->jumlah_dana, 
                    '', 
                    '', 
                    '', 
                    'Retur Transaksi '.$detail_tx->tx_code, 
                    $saldo_akhir
                );

                $class_lakuemas->update_saldo($detail_tx->id_customer, $detail_tx->id_tabungan, $saldo_akhir);
                $this->update_average_sell_price($detail_tx->id_tabungan, $id_tx);

                dispatch(new SendEmailRejectJualJob($detail_tx->email, $detail_tx->name, $detail_tx->nomor_rekening, $detail_tx->tx_code, $detail_tx->debet, $detail_tx->created_at));
                
                $return['success'] = '1';
                return response()->json($return, 200);
            }
        }

        $return["message"] = "Unknown Error";
        $return["errors"]["error"][0] = "Unknown error";
        return response()->json($return, 422);
    }

    private function update_average_sell_price($id_tabungan, $id_transaksi){
        (new Average_sell_price_lib)->update($id_tabungan, $id_transaksi);
    }
}