<?php namespace App\Http\Controllers;

use App\Models\Usersdata;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\View\View;
use Yajny\EventsYj\Events\RecalculateBalance;
use Yajny\EventsYj\Events\RecalculateBalanceHistory;
use Yajny\Member\Models\BalanceTransaction;
use Yajny\Member\Models\Member;
use Yajny\Member\Models\Sale;
use Yajny\Member\Models\UserBonus;
use Yajny\Member\Models\UserNewBonus;
use Yajny\Member\Models\UserPayouts;
use Yajny\Member\Models\UserSales;


class UsersdataController extends DataManangeCtrl {

	protected $layout = "layouts.main";
	protected $data = array();	
	public $module = 'usersdata';

	public function __construct()
	{		
		
		$this->model = new Usersdata();
		parent::__construct();
	}

    /**
     * @param $request
     * @return string[]
     */
	public function destroy($request)
    {

        return ['message' => "You can't delete user", 'status' => 'error'];
    }

//    public function index(Request $request)
//    {
//        // Make Sure users Logged
//        if (!\Auth::check())
//            return redirect('/')->with('status', 'error')->with('message', 'You are not logged in');
//        $this->grab($request);
//        if ($this->access['is_view'] == 0 && $this->access['is_search'] == 0)
//            return redirect('dashboard')->with('message', __('core.note_restric'))->with('status', 'error');
//        // Render into template
//        //return view('manage.' . $this->module . '.index', $this->data);
//
//
//        if (!is_null($request->input('t'))) {
//
//            $rowData = \Yajny\Member\Models\Member::where('is_merchant', '<>', '1')
//                ->where('is_merchant', '<>', '1')
//                ->where('user_id', '<>', NULL)
//                ->orderby('user_id', 'asc')->paginate();
//        } else {
//            $rowData =  \Yajny\Member\Models\Member::where('is_merchant', '=', '1')
//                ->where('user_id', '<>', NULL)
//                ->orderby('user_id', 'asc')->paginate();
//
//        }
//        $page = isset($_GET['page']) ? $_GET['page'] : 1;
//        $params = array(
//            'page'		=> $page ,
//            'limit'		=>  (isset($_GET['rows']) ? filter_var($_GET['rows'],FILTER_VALIDATE_INT) : 10 ) ,
//            'sort'		=> $this->info['key'] ,
//            'order'		=> 'asc',
//            'params'	=> '',
//            'global'	=> 1
//        );
//
//
//        $page = $page >= 1 && filter_var($page, FILTER_VALIDATE_INT) !== false ? $page : 1;
//        $result = $this->model::getRows( $params );
//        $pagination = new Paginator($result['rows'], $result['total'], $params['limit']);
//        $pagination->setPath('');
//        $data['rowData'] 	= $rowData['rows'];
//        $data['i']			= ($page * $params['limit'])- $params['limit'];
//        $data['pagination'] = $pagination;
//
//
//        $this->data = array_merge(array(
//            'pageTitle' => 'USERS',
//            'pageNote' => 'Manage All Users',
//            'tableGrid' => $this->info['config']['grid'],
//            'access' => $this->access,
//            'pageModule' => $this->module,
//            'frontendSlug' => $this->info['frontend_slug'],
//            'return' => self::returnUrl(),
//            'param' => $params,
//
//        ), $rowData->toArray());
//        return view('manage.' . $this->module . '.index', $this->data);
//
//    }
    /**
     * @param $userID
     * @return \Illuminate\Http\RedirectResponse
     */
    public function recalculateBalance($userID)
    {
        event(new RecalculateBalanceHistory([$userID]));
        return redirect()->back();
    }

    /**
     * @param $userID
     * @param $page
     * @return mixed
     */
    public function getBalanceTransactions(Request $request)
    {
        $user_id =$request->user_id  ;
        $page = $request->input('page')  ;
        $p  =($page) ?? $this->model->getPage();
        $result=[] ;
        $balance_transactions= \Yajny\Member\Models\Member::find($user_id)->BalanceTransactions()->paginate(50);

        $currencyRates = \Yajny\Member\Models\CurrencyRate::all();

        foreach($balance_transactions as  &$bt){
            if ($bt->source_type == "cashback"){
                $source=UserSales::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }elseif($bt->source_type == "new-bonus"){
                $source=UserNewBonus::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }elseif($bt->source_type=="payout"){
                $source=UserPayouts::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }
            else{
                $source=UserBonus::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }


            $currencyRateSAR =\Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'SAR', $bt->created_at) ?? null;
            $currencyRateAED =\Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'AED', $bt->created_at) ?? null;
            $currencyRateKWD =\Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'KWD', $bt->created_at) ?? null;

            $bt->currencyRateEGP = $currencyRateEGP;
            $bt->currencyRateSAR =$currencyRateSAR->conversion_rate;
            $bt->currencyRateAED =$currencyRateAED->conversion_rate;
            $bt->currencyRateKWD =$currencyRateKWD->conversion_rate;


            array_push($result,$bt);
        }

        $balance_transactions->data=$result;
        //return  $balance_transactions  ;
       return view('manage.' . $this->module . '.ajax_items', compact('balance_transactions'));
    }

    /**
     * @param Request $request
     * @return array
     */
    public function recalculateUserBalance(Request $request)
    {
      event(new RecalculateBalance(\Yajny\Member\Models\Member::find($request->user_id)));

        return array(array('status'=>'success','message'=>'balance calculated successively'),200);
    }
    /**
     * @param $userID
     * @param $page
     * @return mixed
     */
    public function exportBalanceTransactions(Request $request)
    {
        $result=[] ;
        $user_id =$request->user_id  ;
        $user=\Yajny\Member\Models\Member::find($user_id);
        $balance_transactions= $user->BalanceTransactions()->take(200)->get() ;
        $currencyRates = \Yajny\Member\Models\CurrencyRate::all();

        foreach($balance_transactions as  &$bt){
            if ($bt->source_type == "cashback"){
                $source=UserSales::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }elseif($bt->source_type == "new-bonus"){
                $source=UserNewBonus::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }elseif($bt->source_type=="payout"){
                $source=UserPayouts::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }
            else{
                $source=UserBonus::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }


            $currencyRateSAR =\Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'SAR', $bt->created_at) ?? null;
            $currencyRateAED =\Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'AED', $bt->created_at) ?? null;
            $currencyRateKWD =\Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'KWD', $bt->created_at) ?? null;

            $bt->currencyRateEGP = $currencyRateEGP;
            $bt->currencyRateSAR =$currencyRateSAR->conversion_rate;
            $bt->currencyRateAED =$currencyRateAED->conversion_rate;
            $bt->currencyRateKWD =$currencyRateKWD->conversion_rate;


            array_push($result,$bt);
        }

        $balance_transactions->data=$result;
       return view('manage.' . $this->module . '.export_excel', compact('balance_transactions'))->with('user_id',$user_id);
    }
    /**
     * @param $userID
     * @param $page
     * @return mixed
     */
    public function exportBalanceTransactionsCsv(Request $request)
    {
        $result=[] ;
        $user_id =$request->user_id  ;
        $user=\Yajny\Member\Models\Member::find($user_id);
        $balance_transactions= $user->BalanceTransactions()->take(200)->get() ;
        $currencyRates = \Yajny\Member\Models\CurrencyRate::all();

        foreach($balance_transactions as  &$bt){
            if ($bt->source_type == "cashback"){
                $source=UserSales::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }elseif($bt->source_type == "new-bonus"){
                $source=UserNewBonus::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }elseif($bt->source_type=="payout"){
                $source=UserPayouts::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }else{
                $source=UserBonus::find($bt->source_id);
                $currencyRateEGP =$source->currency_rate ?? \Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'EGP', $bt->created_at)->conversion_rate;
            }


            $currencyRateSAR =\Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'SAR', $bt->created_at) ?? null;
            $currencyRateAED =\Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'AED', $bt->created_at) ?? null;
            $currencyRateKWD =\Yajny\Member\Models\Member::getCurrencyRate($currencyRates, 'KWD', $bt->created_at) ?? null;

            $bt->currencyRateEGP = $currencyRateEGP;
            $bt->currencyRateSAR =$currencyRateSAR->conversion_rate;
            $bt->currencyRateAED =$currencyRateAED->conversion_rate;
            $bt->currencyRateKWD =$currencyRateKWD->conversion_rate;


            array_push($result,$bt);
        }

        $balance_transactions->data=$result;
       return view('manage.' . $this->module . '.export_csv', compact('balance_transactions'))->with('user_id',$user_id);
    }
}
