<?php

namespace App\Modules\Company\Subscription\Payments;

use App\Models\CompanySubscriptionPayments;
use App\Traits\SearchTraits;
use App\Traits\SortingTraits;
use App\Traits\UserTraits;

class Payment
{

    use SortingTraits, SearchTraits, UserTraits;

    public function fetchAllPayments($payload)
    {
        $company_id = $this->getCurrentUser()->company_id;
        // $company_id = 1;

        // sorting
        $sortField = $this->sortField($payload, 'transaction_date'); // transaction_date = default column to search
        $sortOrder = $this->sortOrder($payload, 'desc');

        // searching
        $invoiceNoSearch = $this->searchField($payload->invoice_no);
        $companyNameSearch = $this->searchField($payload->company_name);

        // advance search
        $monthSearch = $payload->month;
        if ($monthSearch == 0) {
            $monthSearch = '';
        }
        $yearSearch = $payload->year;

        $status = 'Approved';
        return CompanySubscriptionPayments::select(
            'company_subscription_payments.id',
            'company_subscription_payments.company_id',
            'company_subscription_payments.created_at as transaction_date',
            'company_subscription_payments.amount_paid',
            'company_subscription_payments.invoice_no',
            'company_subscription_payments.charge_id',
            'company_subscription_payments.charge_id',
            'company_subscription_payments.balance',
            'company_subscription_payments.discount',
            'company_subscription_payments.penalty_charge',
            'company_subscription_payments.previous_bill',
            'company_subscription_payments.current_bill',
            'company_subscription_payments.additional_penalty_charge',
            'company_subscription_payments.type',
            'companies.name as company_name',
            'companies.company_tel',
            'companies.email_address',
            'companies.street_address',
            'companies.city',
            'companies.state',
            'companies.zipcode',
            'company_subscription_rates.name as subscription_name',
        )
            ->join('companies', 'companies.id', '=', 'company_subscription_payments.company_id')
            ->join('company_subscription_rates', 'company_subscription_rates.id', '=', 'company_subscription_payments.subscription_rate_id')
            ->when(!empty($invoiceNoSearch), function ($query) use ($invoiceNoSearch) {
                return $query->where('company_subscription_payments.invoice_no', 'LIKE', '%' . $invoiceNoSearch . '%');
            })
            ->when(!empty($companyNameSearch), function ($query) use ($companyNameSearch) {
                return $query->where('companies.name', 'LIKE', $companyNameSearch . '%');
            })
            ->when(!empty($yearSearch), function ($query) use ($yearSearch) {
                return $query->whereYear('company_subscription_payments.created_at', $yearSearch);
            })
            ->when(!empty($monthSearch), function ($query) use ($monthSearch) {
                return $query->whereMonth('company_subscription_payments.created_at', $monthSearch);
            })
            ->where('company_subscription_payments.company_id', $company_id)
            ->orderBy($sortField, $sortOrder)
            ->paginate(10);
    }

    public function fetchPaymentDetails($id)
    {

        $payment = CompanySubscriptionPayments::select(
            'company_subscription_payments.id',
            'company_subscription_payments.created_at as transaction_date',
            'company_subscription_payments.amount_paid',
            'company_subscription_payments.invoice_no',
            'company_subscription_payments.charge_id',
            'company_subscription_payments.charge_id',
            'company_subscription_payments.balance',
            'company_subscription_payments.discount',
            'company_subscription_payments.coupon_discount as company_discount',
            'company_subscription_payments.total_discounted_amount as discount',
            'company_subscription_payments.penalty_charge',
            'company_subscription_payments.previous_bill',
            'company_subscription_payments.current_bill',
            'company_subscription_payments.additional_penalty_charge',
            'companies.name as company_name',
            'companies.company_tel',
            'companies.email_address',
            'companies.street_address',
            'companies.city',
            'companies.state',
            'companies.zipcode',
            'company_subscription_rates.name as subscription_name',
        )
            ->join('companies', 'companies.id', '=', 'company_subscription_payments.company_id')
            ->join('company_subscription_rates', 'company_subscription_rates.id', '=', 'company_subscription_payments.subscription_rate_id')
            ->where('company_subscription_payments.invoice_no', $id)
            ->get();

        return response()->json($payment);
    }

}
