<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Yajny\MailYj\Mails\Email;
use Yajny\Member\Models\CurrencyRate;
use Yajny\Member\Models\Member;
use Yajny\Member\Models\UserBonus;
use Yajny\Member\Models\UserNewBonus;
use Yajny\Member\Models\UserSales;

class OrderController extends Controller
{
    /**
     * @var mixed
     */
    public $user_id;

    /** @var Member $member */
    public $member;

    /**
     * Create a new controller instance.
     *
     * @param Request $request
     */
    public function __construct(Request $request)
    {

        //  dd($request->get('user_id'));
        $is_valid = true;
        $user_id = $request->get('user_id');
        if (!$user_id)
            $is_valid = false;

        $this->user_id = $user_id;
        if (!$this->user_id > 0)
            $is_valid = false;

        $this->member = Member::find($this->user_id);
        if (!$this->member)
            $is_valid = false;

        if (!$is_valid) {
            echo '[]';
            die;
        }
    }

    /**
     * @param Request $id
     * @return mixed
     */
    public function getSale($id)
    {
        $sale = UserSales::with('store')->where([['id', $id], ['user_id', $this->member->user_id]])->first();
        if (is_null($sale))
            return '';
        $memberCurrency = $this->member->getUserCurrency();
        $currencyRate = CurrencyRate::where('start_date', '<', $sale->transaction_time)
            ->where('currency_code', $memberCurrency->iso_code)
            ->orderBy('start_date', 'desc')->first();
        if (is_null($currencyRate)) $currencyRate = CurrencyRate::where('currency_code', $memberCurrency->iso_code)->first();
        $memberCurrency->conversion_rate = $currencyRate->conversion_rate;
        $sale->user_cashback_amount_formatted = '$ ' . $sale->cashback;
        $cashback = $sale->cashback;
        $sale->applyCurrencyConversion($memberCurrency);
        if ($sale->currency == $memberCurrency->iso_code) {
            $memberCurrency->conversion_rate = 1;
            $sale->order_amount_formatted = ($sale->local_order_amount) . ' ' . $memberCurrency->iso_code;
            $sale->cashback_formatted = ($sale->local_cashback) . ' ' . $memberCurrency->iso_code;
        }
        $sale->user_cashback_amount = $cashback;
        $sale->currency_rate_formatted = '1 USD = ' . $currencyRate->conversion_rate . ' ' . $memberCurrency->iso_code;
        return $sale;
    }

    /**
     * @param Request $id
     * @return mixed
     */
    public
    function getBonus($id)
    {
        $bonus = UserBonus::where([['id', $id], ['user_id', $this->member->user_id]])->first();
        $memberCurrency = $this->member->getUserCurrency();
        if (is_null($bonus))
            return '';
        $currencyRate = CurrencyRate::where('start_date', '<', $bonus->awarded_on)
            ->where('currency_code', $memberCurrency->iso_code)
            ->orderBy('start_date', 'desc')->first();
        if (is_null($currencyRate)) $currencyRate = CurrencyRate::where('currency_code', $memberCurrency->iso_code)->first();
        $memberCurrency->conversion_rate = $currencyRate->conversion_rate;
        $bonus->applyCurrencyConversion($memberCurrency);
        $bonus->currency_rate_formatted = '1 USD = ' . $currencyRate->conversion_rate . ' ' . $memberCurrency->iso_code;
        return $bonus;
    }

    /**
     * @param Request $id
     * @return mixed
     */
    public
    function getNewBonus($id)
    {
        $bonus = UserNewBonus::where([['id', $id], ['user_id', $this->member->user_id]])->first();
        $memberCurrency = $this->member->getUserCurrency();
        if (is_null($bonus))
            return '';
        $currencyRate = CurrencyRate::where('start_date', '<', $bonus->awarded_on)
            ->where('currency_code', $memberCurrency->iso_code)
            ->orderBy('start_date', 'desc')->first();
        if (is_null($currencyRate)) $currencyRate = CurrencyRate::where('currency_code', $memberCurrency->iso_code)->first();
        $memberCurrency->conversion_rate = $currencyRate->conversion_rate;
        $bonus->applyCurrencyConversion($memberCurrency);
        $bonus->currency_rate_formatted = '1 USD = ' . $currencyRate->conversion_rate . ' ' . $memberCurrency->iso_code;
        return $bonus;
    }
}
