<?php

namespace App\Http\Controllers\Admin;

use App\AdditionalFile;
use App\Company;
use App\Credit;
use App\CreditHistory;
use App\Currency;
use App\DataTables\AdminTopClientDataTable;
use App\DataTables\AdminUserDataTable;
use App\DataTables\AdminUserPaymDataTable;
use App\DataTables\ClientRegistrationDataTable;
use App\DataTables\ResellerUserDataTable;
use App\DataTables\ResellerUserPaymDataTable;
use App\Http\Controllers\Controller;
use App\Network;
use App\Role;
use App\Tools\SmsTools;
use App\User;
use App\UserCurrency;
use App\UserNetwork;
use App\UserSenderId;
use Carbon\Carbon;
use Illuminate\Http\Request;

use App\Http\Requests;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;
use App\Http\Requests\Admin\UpdateUserRequest;
use App\Opt\CompanyTrait;

class UserController extends Controller
{
    use CompanyTrait;

    public function user_networks($user_id)
    {
        $user = User::findOrFail($user_id);
        $data = [];
        foreach (Network::with('country')
                     ->orderBy('country_id')
                     ->orderBy('nice_name')
                     ->get() as $record) {
            $existing = $user->user_networks()->where([
                ['network_id', '=', $record->id],
                ['country_id', '=', $record->country_id]
            ])->first();
            $data[] = [
                'id' => $record->id,
                'full_name' => $record->full_name,
                'nice_name' => $record->nice_name,
                'code' => $record->code,
                'country_id' => $record->country_id,
                'country' => $record->country->name,
                'prefix' => $record->prefix,
                'sms_price' => empty($existing) ? $record->sms_price : $existing->sms_price
            ];
        }
        return view('admin.users.user_networks', ['data' => $data, 'user' => $user]);
    }

    public function update_user(User $user, UpdateUserRequest $request)
    {

        $company = $user->company;

        $result = $this->editUserInfo($request); // using a trait here

        DB::beginTransaction();

            $user->update($result);

            $company->update($request->validated());


        if($request->isMethod('post'))
        {
            //set currency
            $currency = Currency::query()->findOrFail($request->get('currency_id'));
            if($currency->abbr !== $user->currency) {
                if($currency->default) {
                    $user->userCurrency()->delete();
                    $user->user_networks()->delete();
                } else {
                    if (empty($user->userCurrency)) {
                        $user->userCurrency()->create(['currency_id' => $currency->id, 'user_id' => $user->id]);
                    } else {
                        $user->userCurrency->update(['currency_id' => $currency->id]);
                    }
                    foreach (Network::all() as $record2) {
                        $existing = $user->user_networks()->where([
                            ['network_id', '=', $record2->id],
                            ['country_id', '=', $record2->country_id]
                        ])->first();
                        if(empty($existing)) {
                            $user->user_networks()->create([
                                'network_id' => $record2->id,
                                'country_id' => $record2->country_id,
                                'sms_price' => $request->sms_price
                            ]);
                        } else {
                            $existing->update([
                                'network_id' => $record2->id,
                                'country_id' => $record2->country_id,
                                'sms_price' => $request->sms_price
                            ]);
                        }
                    }
                }
            }
        }


        if($user->credit)
            {
                $user->credit->update(['price' => $request->sms_price]);
            }

            $output = $this->editSavedFiles($request, $company);

            if (!$output)
            {
                $company->update($output);
            }

            DB::commit();



            return redirect()->route('admin.root.company')->with('success', 'Company Successfully Updated');

    }

    public function edit_user(Request  $request,User $user)
    {
        $company =  $user->company;
        $record = $user::with(['credit','userCurrency'])->first();
        $currencies = Currency::orderBy('default', 'desc')->orderBy('name', 'asc')->get();

        return view('admin.users.edit', [
            'record'=>$record,
            'company'=>$company,
            'currencies'=>$currencies,
        ]);

    }

    public function edit_user_network($user_id, $id)
    {
        $user = User::query()->findOrFail($user_id);
        $global_network = Network::query()->findOrFail($id);
        $user_network = $user->user_networks()
            ->where('network_id', $global_network->id)
            ->where('country_id', $global_network->country_id)
            ->first();
        $record = [
            'id' => $global_network->id,
            'full_name' => $global_network->full_name,
            'nice_name' => $global_network->nice_name,
            'code' => $global_network->code,
            'country_id' => $global_network->country_id,
            'country' => $global_network->country->name,
            'prefix' => $global_network->prefix,
            'sms_price' => empty($user_network) ? $global_network->sms_price : $user_network->sms_price
        ];

        return view('admin.users.edit_user_network', [
            'user' => $user,
            'record' => $record
        ]);

    }

    public function update_user_network(Request $request, $user_id, $id)
    {
        $this->validate($request, [
            'sms_price' => 'required|numeric'
        ]);

        $user = User::findOrFail($user_id);
        $global_network = Network::findOrFail($id);
        $user_network = $user->user_networks()
            ->where('network_id', $global_network->id)
            ->where('country_id', $global_network->country_id)
            ->first();

        $new_price = (float)$request['sms_price'];
        if (!empty($new_price)) {
            if (!empty($user_network)) {
                $user_network->update(['sms_price' => $new_price]);
            } else {
                if ((float)$new_price !== (float)$global_network->sms_price) {
                    $user->user_networks()->create([
                        'network_id' => $global_network->id,
                        'country_id' => $global_network->country_id,
                        'sms_price' => $new_price
                    ]);
                }
            }
        } else {
            return redirect()->back()->withInput()->withErrors(array('error' => 'The network price is invalid'));
        }

        $request->session()->flash('success', 'The user network price was successfully updated!');
        return redirect()->route('admin.users.networks', ['user_id' => $user->id]);
    }

    public function index(AdminUserDataTable $dataTable)
    {
        return $dataTable->render('admin.users.index');
    }

    public function new_user()
    {
        $roleId = Role::where('name', 'reseller')->firstOrFail()->id;
        $resellers = User::where('role_id', $roleId)->get(['id', 'full_name']);
        $currencies = Currency::orderBy('default', 'desc')->orderBy('name', 'asc')->get(['id', 'name']);
        return view('admin.users.new', [
            'resellers' => $resellers,
            'currencies' => $currencies
        ]);
    }

    public function get_currency_abbr()
    {
        return ['value' => Currency::findOrFail(request()->get('id'))->abbr];
    }

    public function post_new_user(Request $request)
    {
        $this->validate($request, [
            'contact_person' => 'required|max:255',
            'username' => 'required|min:4|max:50|unique:users,username,NULL,id,deleted_at,NULL|unique:stanbic_users,username,NULL,id,deleted_at,NULL',
            'email' => 'required|email|unique:users,email',
            'phone_number' => 'required|digits_between:9,16',
            'password' => 'required|min:6',
            'password_confirmation' => 'same:password',
            'price' => 'required|numeric',
            'email_price' => 'required|numeric',
            'credited' => 'present|numeric',
            'role' => 'required',
            'currency_id' => 'required|exists:currencies,id',
            'reseller_id' => 'required_if:role,user'
        ]);

        $username = $request->get('username');
        $existingCredit = Credit::whereUsername($username)->first();
        if (!empty($existingCredit)) {
            return back()->withInput($request->all())->withErrors(['username' => 'The username has already been taken!']);
        }

        $reseller = null;
        if ($request['role'] == 'user') {
            $reseller = User::findOrFail($request['reseller_id']);
        }

        //get first name and last name
        $inputs = $request->all();
        $owner = Auth::user();
        $parts = explode(" ", $request['contact_person']);
        $inputs['first_name'] = array_pop($parts);
        $inputs['last_name'] = implode(" ", $parts);
        $inputs['full_name'] = $request['contact_person'];
        $inputs['created_by'] = !empty($reseller) ? $reseller->username : $owner->username;
        $inputs['must_change_password'] = 1;
        $inputs['pass'] = $request['password'];
        $inputs['status'] = 'active';

        //format the phone number
        $inputs['phone_number'] = SmsTools::format_gh_number($request->get('phone_number'));

        //encrypt the password
        $inputs['password'] = bcrypt($request['password']);
        $inputs['role_id'] = Role::where('name', $request['role'])->firstOrFail()->id;


        DB::beginTransaction();
        //create the client
        $user = User::create($inputs);

        //credit new client
        if (empty($reseller)) {
            $user->credit()->create([
                'username' => $user->username,
                'price' => $request['price'],
                'email_price' => $request['email_price'],
                'credit_alloted' => $request['credited'],
                'old_bal' => 0,
                'new_bal' => $request['credited'],
                'credit_used' => 0,
                'credited' => 0,
                'updated_by' => $owner->username
            ]);

            //update payment history
            if ($request['credited'] > 0) {
                $user->creditHistory()->create([
                    'date_credited' => Carbon::now()->toDateTimeString(),
                    'username' => $user->username,
                    'price' => $request['price'],
                    'credit_alloted' => $request['credited'],
                    'old_bal' => 0,
                    'new_bal' => $request['credited'],
                    'credit_used' => 0,
                    'credited' => 0,
                    'credited_by' => $owner->username,
                    'comments' => $user->username . ' has been credited by ' . $owner->username . ' with ' . $request['credited']
                ]);
            }
        } else {
            $cred_add = $request['credited'];
            $price = $request['price'];
            $email_price = $request['email_price'];
            $reseller_credit = $reseller->credit;
            $reseller_price = $reseller_credit->price;
            $reseller_email_price = $reseller_credit->email_price;
            //check price validity
            if ($price < $reseller_price) {
                return redirect()->back()->withInput()->withErrors(array('error' => 'The SMS price should be at least ' . $reseller_price));
            }
            if ($email_price < $reseller_email_price) {
                return redirect()->back()->withInput()->withErrors(array('error' => 'The email price should be at least ' . $reseller_email_price));
            }

            //deduct owner
            $credit_to_be_deductued_from_reseller = $cred_add;
            $reseller_new_bal = $reseller_credit->new_bal;
            if ($reseller_new_bal < $credit_to_be_deductued_from_reseller) {
                return redirect()->back()->withInput()->withErrors(array('error' => 'You do not have enough balance to perform this operation'));
            }

            $reseller->creditHistory()->create([
                'date_credited' => Carbon::now()->toDateTimeString(),
                'username' => $reseller->username,
                'price' => $reseller_credit->price,
                'credit_alloted' => $reseller_credit->credit_alloted,
                'old_bal' => $reseller_credit->new_bal,
                'new_bal' => $reseller_credit->new_bal - $credit_to_be_deductued_from_reseller,
                'credit_used' => $reseller_credit->credit_used + $credit_to_be_deductued_from_reseller,
                'credited' => -($credit_to_be_deductued_from_reseller),
                'credited_by' => $owner->username,
                'comments' => $owner->username . ' has credited user ' . $inputs['username'] . ' with ' . $cred_add
            ]);
            $reseller_credit->credit_used += $credit_to_be_deductued_from_reseller;
            $reseller_credit->old_bal = $reseller_credit->new_bal;
            $reseller_credit->new_bal -= $credit_to_be_deductued_from_reseller;
            $reseller_credit->updated_by = $owner->username;
            $reseller_credit->save();

            //credit new client
            $user->credit()->create([
                'username' => $user->username,
                'price' => $price,
                'email_price' => $email_price,
                'credit_alloted' => $cred_add,
                'old_bal' => 0,
                'new_bal' => $cred_add,
                'credit_used' => 0,
                'credited' => 0,
                'updated_by' => $owner->username
            ]);

            //update payment history
            if ($cred_add > 0) {
                $user->creditHistory()->create([
                    'date_credited' => Carbon::now()->toDateTimeString(),
                    'username' => $user->username,
                    'price' => $price,
                    'credit_alloted' => $cred_add,
                    'old_bal' => 0,
                    'new_bal' => $cred_add,
                    'credit_used' => 0,
                    'credited' => 0,
                    'credited_by' => $owner->username,
                    'comments' => $user->username . ' has been credited by ' . $owner->username . ' with ' . $cred_add
                ]);
            }
        }
        //set currency
        $currency = Currency::findOrFail($request->get('currency_id'));
        if (!$currency->default) {
            UserCurrency::create([
                'currency_id' => $currency->id, 'user_id' => $user->id
            ]);
            foreach (Network::all() as $record) {
                $existing = $user->user_networks()->where([
                    ['network_id', '=', $record->id],
                    ['country_id', '=', $record->country_id]
                ])->first();
                if (empty($existing)) {
                    $user->user_networks()->create([
                        'network_id' => $record->id,
                        'country_id' => $record->country_id,
                        'sms_price' => $price
                    ]);
                } else {
                    $existing->update([
                        'network_id' => $record->id,
                        'country_id' => $record->country_id,
                        'sms_price' => $price
                    ]);
                }
            }
        }
        DB::commit();

        //Send email notification to user
        $m_email = 'support@npontu.com';
        if (!empty($m_email)) {
            //prepare data to pass to email view
            $data = [
                'username' => $request['username'],
                'password' => $request['password'],
                'full_name' => $inputs['full_name'],
            ];
            if (!empty($reseller)) {
                if ($reseller->email == 'albert.ngumba1@cellulant.com') {
                    $data['admin_mail'] = 'servicedesk@cellulant.com';
                } else {
                    $data['admin_mail'] = $reseller->email;
                }

                $data['loginUrl'] = route('login', ['name' => $reseller->username]);
                $data['org'] = (!empty($reseller->organisation) ? $reseller->organisation : ' the SMS Platform');


                //send email notification to clent
                Mail::send('emails.reseller_reg_msg', $data, function ($m) use ($inputs, $reseller) {
                    $m_email = 'support@npontu.com';
                    $m->from($m_email, !empty($reseller->organisation) ? $reseller->organisation : 'SMS Platform');
                    $m->to($inputs['email'], $inputs['full_name']);
                    $m->subject('Welcome to ' . (!empty($reseller->organisation) ? $reseller->organisation : ' the SMS Platform') . '!');
                });
                $organisation = (!empty($owner->organisation) ? $owner->organisation : 'the SMS Platform');
                $msg = "Hello {$inputs['first_name']},
Your account with $organisation has been successfully created.
Your username is: {$request['username']} and your password is: {$request['password']}. Thank you";

            } else {
                //prepare data to pass to email view
                $data['loginUrl'] = route('reseller.login', ['name' => $request['username']]);
                //send email notification to clent
                Mail::send('emails.registration_msg', $data, function ($m) use ($request) {
                    $m_email = 'support@npontu.com';
                    $m->from($m_email, 'Deywuro');
                    $m->to($request['email'], $request['full_name']);
                    $m->subject('Welcome to Deywuro!');
                });
                $msg = "Hello {$inputs['first_name']},
Your account with Deywuro has been successfully created.
Your username is: {$request['username']} and your password is: {$request['password']}. Thank you";
            }

            // send sms to client
            try {
                @SmsTools::send_internal_sms($inputs['phone_number'], $msg);
            } catch (\Exception $ex) {
            }
        }

        $request->session()->flash('success', 'The new user was successfully added!');
        return redirect()->route('admin.users');
    }

    public function new_user_payment($id)
    {
        $record = User::findOrFail($id);
        return view('admin.users.new_user_payment', ['record' => $record]);
    }

    public function mark_payment_as_paid($id)
    {
        $record = CreditHistory::findOrFail($id);
        $record->status = 'paid';
        $record->save();
        session()->flash('success', 'The payment has been marked as paid');
        return redirect()->back();
    }

    public function post_user_payment(Request $request, $id)
    {
        // dd($id);
        $user = User::with('credit')->findOrFail($id);
        $user_credit = $user->credit;

        $this->validate($request, [
            'credited' => 'required|numeric',
            'status' => 'required'
        ]);

        //get first name and last name
        $owner = Auth::user();
        // dd($owner);
        DB::beginTransaction();
        $cred_add = (double)$request['credited'];
        $price = (double)$user_credit->price;

        //update payment history
        if ($cred_add > 0) {
            $user->creditHistory()->create([
                'status' => $request['status'],
                'date_credited' => Carbon::now()->toDateTimeString(),
                'username' => $user->username,
                'price' => $user_credit->price,
                'credit_alloted' => $user_credit->credit_alloted + $cred_add,
                'old_bal' => $user_credit->new_bal,
                'new_bal' => $user_credit->new_bal + $cred_add,
                'credit_used' => $user_credit->credit_used,
                'credited' => $cred_add,
                'credited_by' => $owner->username,
                'comments' => $user->username . ' has been credited by ' . $owner->username . ' with ' . $cred_add
            ]);
        }

        //credit new client
        $user->credit()->update([
            'credit_alloted' => $user_credit->credit_alloted + $cred_add,
            'old_bal' => $user_credit->new_bal,
            'new_bal' => $user_credit->new_bal + $cred_add,
            'credited' => $cred_add,
            'updated_by' => $owner->username
        ]);

        DB::commit();

        //send email to client
        try {
            $m_email = 'support@npontu.com';
            if (!empty($m_email)) {
                //prepare data to pass to email view
                $data = [
                    'currency' => $user->currency,
                    'amount' => $request['credited'],
                    'credited_by' => Auth::user()->username,
                    'full_name' => $user->full_name,
                    'org' => ''
                ];
                //send email notification to clent
                Mail::send('emails.credit_account_msg', $data, function ($m) use ($user) {
                    $m_email = 'support@npontu.com';
                    $m->from($m_email, 'Deywuro');
                    $m->to($user->email, $user->full_name);
                    $m->cc('support@npontu.com', 'Npontu Support Team');
                    $m->cc('finance@npontu.com', 'Npontu Finance Team');
                    //$m->replyTo('support@npontu.com', 'Npontu Support Team');
                    $m->subject('Your account has been credited!');
                });

            }
        } catch (\Exception $ex) {
        }

        $request->session()->flash('success', 'The user account was successfully credited!');
        return redirect()->route('admin.users.payments', ['id' => $id]);
    }

    public function lock_user($id)
    {
        $record = User::findOrFail($id);

        $record->is_locked = !$record->is_locked;
        $record->save();


        $data = [
            'body' => $record->is_locked ? 'Your account has been locked please contact support for further enquires' : 'Your have now been granted access on Deywuro',
            'email' => $record->email,
            'username' => $record->username,
            'subject' => $record->is_locked ? 'Access Denied ' : 'Access Granted',
        ];

        //send email notification to client
        Mail::send('emails.access', $data, function ($m) use ($data) {
            $m->from('npontualph@gmail.com', 'Deywuro');
            $m->replyTo('support@npontu.com', 'Npontu Support');
            $m->to($data['email'], $data['username']);
            $m->subject($data['subject']);
        });

        $msg = "Hello {$record->full_name},
{$data['body']}";

        $this->sendSms($msg, $record->phone_number);


        session()->flash('success', 'The user was successfully ' . ($record->is_locked ? 'locked' : 'unlocked!'));
        return redirect()->route('admin.users', ['id' => $id]);
    }

    public function user_payments($id, AdminUserPaymDataTable $dataTable)
    {
        $record = User::findOrFail($id);
        return $dataTable->render('admin.users.payment', ['record' => $record]);
    }

    public function registration_report(ClientRegistrationDataTable $dataTable)
    {
        return $dataTable->render('admin.report.registrations');
    }


    public function top_clients(Request $request)
    {
        $results    = ['detail' => [], 'summary' => []];
        $user       = Auth::user();
        $from_date  = new Carbon('first day of this month');
        $to_date    = new Carbon('last day of this month');
        $limit = $request->input('limit');

        if (strtoupper($request->method()) == 'POST')
        {
            $data = $request->request;

            $start      = $data->get('from_date');
            $end        = $data->get('to_date');
            $limit        = $data->get('limit');

            $type = !empty($data->get('type')) ? $data->get('type') : $type;


            if ($from_date != null && $to_date != null)
            {
                $from_date  = Carbon::parse($start)->toDateTimeString();
                $to_date    = Carbon::parse($end)->addDay(1)->toDateTimeString();
            }

            $roleId = strtolower($type) == 'reseller' ?
                Role::where('name', 'reseller')->firstOrFail()->id :
                Role::where('name', 'user')->firstOrFail()->id;

            $qresult = DB::table('logs')
                ->leftJoin('users', 'users.id', '=', 'logs.user_id')
                ->leftJoin('credits as rev', 'rev.user_id', '=', 'logs.user_id')
                ->leftJoin('credits as prf', 'prf.username', '=', 'users.created_by')
                ->select(DB::raw("client, sms, price, page, cprice, rprice, cprice - rprice as profit"))
                ->select(DB::raw("users.full_name as client, count(logs.id) as sms,
              sum(logs.sms_count) as page, sum(logs.sms_count * rev.price) as cprice, rev.price as price, sum(logs.sms_count * prf.price) as rprice"))
                ->whereBetween('submit_date', [$from_date, $to_date])
                ->where('users.role_id', '=', $roleId)
                ->groupBy(DB::raw("client"))->get()->toArray();



            $pages          = array_sum(array_column($qresult, 'page'));
            $client_sales   = array_sum(array_column($qresult, 'cprice'));
            $reseller_sales = array_sum(array_column($qresult, 'rprice'));
            $profits        = number_format($client_sales - $reseller_sales, 2);

            $results['summary'] = [
                'pages' => $pages,
                'client_sales' => $client_sales,
                'reseller_sales' => $reseller_sales,
                'profits' => $profits
            ];

            foreach ($qresult as $item)
            {
                $profit         = $item->cprice - $item->rprice;
                $profit_share   = @($profit / $profits) === false ? 0.00 : @($profit / $profits)  * 100;
                $traffic_share  = @($item->page / $pages) === false ? 0.00 : @($item->page / $pages) * 100;

                $ttCont=$item->sms;

                if ($ttCont >= $limit) {

                    $results['detail'][] = (object)[
                        'client' => $item->client,
                        'sms' => number_format($item->sms),
                        'page' => number_format($item->page),
                        'cprice' => number_format($item->cprice, 2),
                        'rprice' => number_format($item->rprice, 2),
                        'profit' => number_format($profit, 2),
                        'traffic_share' => number_format($traffic_share, 2),
                        'profit_share' => number_format($profit_share, 2),
                        'revenue' => number_format($item->page * $item->price, 2)
                    ];
                }
            }
        }
        return  view('admin.report.top_clients', [
            'from_date' => date('d-m-Y', strtotime($from_date)),
            'to_date' => date('d-m-Y', strtotime($to_date)),
            'results' => $results,
            'limit'=>$limit
        ]);
    }

    //    public function top_clients(Request $request)
//    {
//        $results = ['detail' => [], 'summary' => []];
//        $user = Auth::user();
//        $from_date = new Carbon('first day of this month');
//        $to_date = new Carbon('last day of this month');
//
//
//        if (strtoupper($request->method()) == 'POST') {
//            $data = $request->request;
//
//            $start = $data->get('from_date');
//            $end = $data->get('to_date');
//            $type = !empty($data->get('type')) ? $data->get('type') : $type;
//
//            if ($from_date != null && $to_date != null) {
//                $from_date = Carbon::parse($start)->toDateTimeString();
//                $to_date = Carbon::parse($end)->addDay(1)->toDateTimeString();
//            }
//
//            $roleId = strtolower($type) == 'reseller' ?
//                Role::where('name', 'reseller')->firstOrFail()->id :
//                Role::where('name', 'user')->firstOrFail()->id;
//
//            $qresult = DB::table('logs')
//                ->leftJoin('users', 'users.id', '=', 'logs.user_id')
//                ->leftJoin('companies', 'users.id', '=', 'companies.user_id')
//                ->leftJoin('credits as rev', 'rev.user_id', '=', 'logs.user_id')
//                ->leftJoin('credits as prf', 'prf.username', '=', 'users.created_by')
//                ->select(DB::raw("client, sms, page, price, cprice, rprice, cprice - rprice as profit"))
//                ->select(DB::raw("users.full_name as client, rev.price as price, companies.name as company, count(logs.id) as sms,
//                  sum(logs.sms_count) as page, sum(logs.sms_count * rev.price) as cprice,
//                  sum(logs.sms_count * prf.price) as rprice"))
//                ->whereBetween('submit_date', [$from_date, $to_date])
//                ->where('users.role_id', '=', $roleId)
//                ->groupBy(['client', 'users.full_name'])
//                ->get()->all();
//
//            $pages = array_sum(array_column($qresult, 'page'));
//            $client_sales = array_sum(array_column($qresult, 'cprice'));
//            $reseller_sales = array_sum(array_column($qresult, 'rprice'));
//            $profits = number_format($client_sales - $reseller_sales, 2);
//
//            $results['summary'] = [
//                'pages' => $pages,
//                'client_sales' => $client_sales,
//                'reseller_sales' => $reseller_sales,
//                'profits' => $profits
//            ];
//
//
//            foreach ($qresult as $item) {
//                $profit = $item->cprice - $item->rprice;
//                $profit_share = @($profit / $profits) === false ? 0.00 : @($profit / $profits) * 100;
//                $traffic_share = @($item->page / $pages) === false ? 0.00 : @($item->page / $pages) * 100;
//
//                $results['detail'][] = (object)[
//                    'client' => $item->company ?? $item->client,
//                    'sms' => number_format($item->sms),
//                    'page' => number_format($item->page),
//                    'cprice' => number_format($item->cprice, 2),
//                    'rprice' => number_format($item->rprice, 2),
//                    'profit' => number_format($profit, 2),
//                    'traffic_share' => number_format($traffic_share, 2),
//                    'profit_share' => number_format($profit_share, 2),
//                    'revenue' => number_format($item->page * $item->price, 2)
//                ];
//            }
//        }
//
//
//        dd($results['detail']);
//        return view('admin.report.top_clients', [
//            'from_date' => date('d-m-Y', strtotime($from_date)),
//            'to_date' => date('d-m-Y', strtotime($to_date)),
//            'results' => $results
//        ]);
//    }
}





