<?php

namespace App\Http\Controllers;

use Auth;
use App\SupplierBooking;
use App\Booking;
use App\Rate;
use App\User;
use App\UserBankSlip;
use App\SettingBeneficiary;
use App\SupplierBookingItem;
use App\SettingSupplier;
use App\SettingTaxRate;
use App\SettingActiveBank;
use Illuminate\Http\Request;

class BookingSupplierController extends Controller
{

    public function index()
    {
        $bookingsupplier = SupplierBooking::all();
    
        $response = [
            'supplier-booking' => $bookingsupplier
        ];

        return response()->json($response, 200);
    }

    public function show($id)
    {
        $booking = Booking::where('id', $id)->first();
        $bankin_amount = round($booking->amount / $booking->rate, 2);

        if (!$booking){
            return response()->json(['message' => 'Booking not found'], 404);
        }

        switch ($booking->term) {
            case "x1_cash":  
                $payment_method = "CASH";
                break;
            case "x1_cheque":
              
                $payment_method = "CHEQUE";
                break;
            case "x1_ba":
               
                $payment_method = "BA";
                break;
            case "x2_cash":
            
                $payment_method = "CASH";
                break;
            case "x2_cheque":
                $payment_method = "CHEQUE";
                break;
            case "x2_ba":
                $payment_method = "BA";
                break;
            default:
                return response()->json([
                    'success' => false,
                    'message' => 'Invalid input',
                ], 422);
                break;
            }


        $supplier_booking = $booking->supplierBooking()->first();
        $dt = new \DateTime($supplier_booking->created_at); 
        $supplier_booking->date = $dt->format('j F Y'); 
        $supplier_booking->marking = $booking->user->marking;
        $supplier_booking->payment_for = $booking->payment_for;
        $supplier_booking->order_no = $booking->order_no;
        $supplier_booking->payment_method = $payment_method;

        $active_bank = SettingActiveBank::first();

        // if setting is set to use customer's beneficiary
        if ($active_bank->beneficiary_id == 0){
            $supplier_booking->acc_name = $booking->account_name;
            $supplier_booking->acc_no = $booking->account_num; // TODO : standardize acc_no
            $supplier_booking->bank_name = $booking->bank_name;
            $supplier_booking->bank_branch = $booking->bank_branch;
        }

        else{
            $beneficiary = SettingBeneficiary::find($active_bank->beneficiary_id);
            $supplier_booking->acc_name = $beneficiary->company_name;
            $supplier_booking->acc_no = $beneficiary->acc_no;
            $supplier_booking->bank_name = $beneficiary->bank_name;
            $supplier_booking->bank_branch = $beneficiary->bank_branch;
        }

        return response()->json($supplier_booking ,200);
    }

    // Only for single booking 
    // TODO : Multiple booking
    public function store(Request $request)
    {
        //$transfer_amount = $request->input("transfer_amount");
        $supplier_id = $request->input("supplier_id");
        $booking_id = $request->input("booking_id");
        $rate = $request->input('rate'); // costing rate
        $rebate = $request->input('rebate');
        $supplier = SettingSupplier::find($supplier_id);
        $booking = Booking::find($booking_id);



        // Calculation (backup)
        // $amountInRMB = $transfer_amount * $rate;
        // $billing = 0.015 * $transfer_amount;
        // $sales_tax = 0.0 * $transfer_amount;
        // $gst = 0 * $transfer_amount; // do we still need this ? 
        // $customerBankInAmount = round($transfer_amount + $gst + $sales_tax + $billing,2);
        // $rmbBankAmount = round($customerBankInAmount + $rebate, 2);

        // Update: changes in 1.1 according to new supplier booking report
        $transfer_amount = $booking->amount;
   
        $amount_in_myr = round($transfer_amount / $rate, 2);
        $amountInRMB = $transfer_amount;
        $tax_rate = SettingTaxRate::latest()->first()->tax_rate;
        $sales_tax = round($tax_rate * $amount_in_myr - $amount_in_myr, 2);
        $amount_after_tax = round($amount_in_myr * $tax_rate,2); 
        //$billing = 0.015 * $transfer_amount;
        //
        //$gst = 0 * $transfer_amount; // do we still need this ? 
        //$customerBankInAmount = round($transfer_amount + $gst + $sales_tax + $billing,2);
        //$rmbBankAmount = round($customerBankInAmount + $rebate, 2);

        // update existing booking supplier if exist 
        $bookingsupplier = SupplierBooking::where('booking_id', $booking_id)->first();

        if (!$bookingsupplier){
            $bookingsupplier = new SupplierBooking();
        }

        $bookingsupplier->supplier_id = $supplier->id;
        $bookingsupplier->amountInRMB = $amountInRMB; // TODO : rename to underscore
        $bookingsupplier->amount_in_myr = $amount_in_myr;
        $bookingsupplier->tax_rate = $tax_rate;
        $bookingsupplier->amount_after_tax = $amount_after_tax;
        $bookingsupplier->rate = $rate;
        $bookingsupplier->rebate = $rebate;  
        $bookingsupplier->salestax_amount = $sales_tax;     
        //$bookingsupplier->payment_method = $request->input('payment_method'); // TODO : remove from db
        //$bookingsupplier->transfer_amount = $transfer_amount; // TODO : remove from db 
        //$bookingsupplier->billing_amount = $billing; // TODO : remove from db
       
        //$bookingsupplier->rmbBankAmount = $rmbBankAmount; // TODO : remove from db 
        $bookingsupplier->booking_id = $booking->id;
        $bookingsupplier->save();

        // update booking status 
		$booking->status = 4;
		$booking->admin_status = 4; 
        $booking->save();


    
        return response()->json($bookingsupplier, 201);
    }

    public function report(Request $request, $id)
    {
        $supplier_booking = Booking::firstOrFail($id)->supplierBooking()->firstOrFail();

        return response()->json($supplier_booking ,200);
    }




}
