<?php
//this is a comment
namespace App\Http\Controllers;

use App\Models\Merchant;
use App\Models\Organisation;
use App\Models\MerchantToDealerRefund;
use App\User;
use App\Models;
use PragmaRX\Countries\Package\Countries;
use Illuminate\Http\Request;
use Carbon\Carbon;
use App\ActivityLog;
use Validator;
use Illuminate\Support\Facades\Auth;
use App\Models\Topup;
use App\Models\Transaction;
use App\Libs\Smsgateway; 
use Session;
use App\Rules\PhoneValidationRule;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class MerchantController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        dd('index');
        $merchants = Models\Merchant::latest()->paginate(10);
        $data = [
            'merchants'=>$merchants,
            'merchants_list' => Models\Merchant::get(),
            'page_title' => 'merchant_list'
        ];
        return view('organisation.merchants',$data);
    }

    public function landing(){
        $merchant_session = session('merchant');
        $merchant = Models\Merchant::find($merchant_session->id);
        // dd($merchant);
        $merchant_trans = Models\Transaction::where('merchant_id', $merchant->id)->orderBy('id', 'DESC')->get();
        $data = [
            'transaction_count' => $merchant_trans->count(),
            'transaction_sum' => $merchant_trans->sum('amount'),
            'transactions' => $merchant_trans->take(15),
            'current_balance' => $merchant['balance'],
            'transactions_graph' => $this->merchant_transactions($merchant),
            'merchant' => $merchant,
            'page_title' => 'Merchant Dashboard',
        ];
        // dd($data['transactions_graph']);
        return view('merchants.landing',$data);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(){
        $data = [
            'page_title' => 'Merchant Registration',
        ];
        return view('organisation.create_merchant', $data);
    }

    public function showrefund(){
        $merchant = session('merchant');
        $dealers = Models\Organisation::get();
        $recent_refunds = Models\MerchantToDealerRefund::with('orgInfo')->orderBy('id', 'DESC')->paginate(15);
        $data = [
            'page_title' => 'Merchant Refund',
            'dealers_arr' => $dealers, 
            'recent_refunds' => $recent_refunds,
            'merchant' => $merchant
        ];
        // dd($data);
        return view('merchants.refund', $data);
    }
    public function showchangepin(){
        $merchant = session('merchant');
        $data = [
            'page_title' => 'Merchant Refund',
            'merchant' => $merchant
        ];
        return view('merchants.showchangepin', $data);
    }
   
    public function refundStore(Request $request){   
        $this->validate($request, [
            // 'dealer_id'   => 'required|integer',
            // 'merchant_id' => 'required|integer',
            // 'amount'      => 'required|numeric|min:0.01',
            'transaction_id' => 'required|string',
            'reason'      => 'required|string',
        ]);
        /*
        $merchant = Models\Merchant::find($request->merchant_id);
        if ($merchant == null) {
            return redirect()->to('merchant/refunds')->with('error_message', 'Merchant not found');
        }
        */
        /*
        $organisation = Models\Organisation::find($request->dealer_id);
        if ($organisation == null) {
            return redirect()->to('merchant/refunds')->with('error_message', 'Dealer not found');
        }
        */
        $transaction = Models\MerchantTopUp::with('merchantInfo', 'orgInfo')->where('status', 'success')->where('transaction_id', $request->transaction_id)->first();
        if ($transaction == null) {
                return response()->json([
                    'success' => false,
                    'message' => 'Transaction not found.'
                ], 400);    
        }
        

        $dealer = $transaction->orgInfo; #Models\OrgUser::findOrFail($request->dealer_id);

        if ($transaction->merchantInfo->balance < $request->amount) {
            //ask team to confirm if merchant can have a negative balance
            return response()->json([
                'success' => false,
                'message' => 'Insufficient merchant balance to process this refund.'
            ], 400);
        }

        $merchant_name = $transaction->merchantInfo->fullname;
        $dealer_name = $transaction->orgInfo->name;
        $merchant = Models\Merchant::find($transaction->merchantInfo->id);
        $organisation = Models\Organisation::find($transaction->orgInfo->id);
        try {
            //todo : remove one of organisation or dealer 
            DB::transaction(function () use ($request, $merchant, $organisation, $dealer, $transaction) {
                Models\MerchantToDealerRefund::create([
                    'dealer_id'     => $organisation->org_id,
                    'merchant_id'   => $transaction->merchant_id, 
                    'amount'        => $transaction->amount,
                    'dealer_msisdn' => $transaction->orgInfo->phone,
                    'reason'        => $request->reason,
                ]);
                $merchant->decrement('balance', $transaction->amount);
                $organisation->increment('balance', $transaction->amount);

                $desc = [
                    'title' => 'Dealer Refund',
                    'data'  => "Refunded a dealer with an amount of " . $transaction->amount, // Typo fixed
                    'type'  => 'merchant',
                ];

                $activity = new ActivityLog;
                $activity->user_id = $request->session()->get('current_merchant.id'); 
                $activity->user_type = 'merchant';
                $activity->description = json_encode($desc);
                $activity->save();

                $transaction->status = 'refunded';
                $transaction->save();
            });

        } catch (\Exception $e) {
            \Log::error("Refund Transaction Failed: " . $e->getMessage());
            return response()->json([
                'success' => false,
                'message' => "Refund Transaction Failed: " . $e->getMessage()
            ], 400);
        }
        $msg = "You have successfully refunded a dealer ($dealer_name) with an amount of $transaction->amount.";
        $dealer_msg = "You have received a refund amount of $transaction->amount from Airtime Merchant ($merchant_name).";
        
        if (env('APP_ENV') !== 'local') {
            try {
                $smsgateway = new Smsgateway; 
                $smsgateway->sendSmsNew($merchant->phone, $msg);
                $smsgateway->sendSmsNew($organisation->phone, $dealer_msg);
            } catch (\Exception $e) {
                \Log::error("Failed to send SMS for refund: " . $e->getMessage());
            }
        }

        \Log::info($msg);
        \Log::info($dealer_msg);
        return response()->json([
            'success' => false,
            'message' => "Dealer Refund successfully processed! "
        ], 200);

    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request){   
        $validatedData = $request->validate([
            'fullname' => 'required',
            // 'phone_number'=> 'required|unique:merchants,phone',
            'phone_number' => ['required', 'unique:merchants,phone',  new PhoneValidationRule],
            'language' => 'required'
        ]);
        /*
        $check_phone = $this->validatePhoneNumber($request->phone_number);
        if ($check_phone == false) {
            if($request->ajax()){
                return response()->json([
                    'code' => 3,
                    'status' => 'fail',
                    'message' => 'Invalid phone number'
                ]);
            }
            else{
                return redirect()->back()->withInput()->with('error_message', 'Invalid phone number!');
            }
        }
        */
        $fullname = $request->input('fullname');
        $phone_number = $request->input('phone_number');
        $pin = rand(1000, 9999);

        $merchant = Models\Merchant::create([
            'fullname' => $fullname,
            'phone' => $request->phone_number, // $check_phone,
            'pin' => md5($pin),
            'org_id' => session('current_org_user.org_id'),
            'language' => 'english'
        ]);
        $desc = [
            'title' => 'Created a merchant',
            'data' => $fullname,
            'type' => 'merchant',
        ];

        $activity = new ActivityLog;
        $activity->user_id = $request->session()->get('current_org_user.id'); // org_user_id ;
        $activity->user_type = 'organisation';
        $activity->description = json_encode($desc);
        $activity->save();
        // TODO: send sms with PIN to merchant phone - 
        $msg = "You have been Successfully registered as an Airtime sales merchant. Your 4-digit PIN is $pin. You will need it for all your activities. Dial *349# to begin.";
        $smsgateway = new Smsgateway; 
        if(env('APP_ENV') !== 'local'){
            $result = $smsgateway->sendSmsNew($check_phone, $msg);
        }
        \Log::info($msg);
        $this->sendNtfy($msg);
        if($request->ajax()){
            return response()->json([
                'code' => 1,
                'status' => 'success',
                'message' => 'Merchant Created Successfully'
            ]);
        }
        else{
            return redirect()->to('organisation/merchants')->with('success_message', 'Successfully Added New Merchant');
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        // dd($id);
        // $merchant = Merchant::where('id',$id)->with('transactions')->get()[0];
        $merchant = Merchant::with('transactions')->find($id);
        $merchants = Models\Merchant::get();
        $merchant_topups = Models\MerchantTopUp::where('merchant_id', $id)->latest()->paginate(20);
        $data = [
            'merchant' => $merchant,
            'merchants_list' => $merchants,
            'page_title' => 'Merchant Details | ' . $merchant->fullname, 
            'merchant_topups' => $merchant_topups,
            'merchant_id' => $id,
        ];
        return view('organisation.merchant_show',$data);

    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
        $merchant = Models\Merchant::findOrfail($id);
        // $countries = Countries::all();
        $data = [
            'merchant' => $merchant,
            'page_title' => 'Merchant Edit',
        ];
        // dd($data);
        return view('organisation.merchant_edit', $data);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $this->validate($request, [
            'fullname' => 'required',
            'phone'=> 'required',
            'status' => 'required',
            'language' => 'required'
        ]);

        $check_phone = $this->validatePhoneNumber($request->phone);
        if ($check_phone == false) {
            return redirect()->back()->withInput()->with('admin-error', 'Invalid phone number!');
        }

        // dd($request->all());

        Merchant::where('id', $id)->update([
            'fullname' => $request->fullname,
            'phone' => $check_phone,
            'language' => $request->language,
            'status' => $request->status
        ]);

        $desc = [
            'title' =>'Updated merchant',
            'data' => $request->fullname,
            'type' => 'merchant',
        ];

        $activity = new ActivityLog;
        $activity->user_id = session('current_org_user.id');// organisation user ID
        $activity->user_type = 'organisation';
        $activity->description = json_encode($desc);
        $activity->save();
        return redirect()->to('organisation/merchants')->with('admin-success', 'Successfully Updated Merchant details');
    }

    public function changePin(Request $request)
    {
        // dd($request->ajax());
        $this->validate($request, [
            'current_pin' => 'required',
            'new_pin'=> 'required',
            'merchant_id' => 'required'
        ]);
        
        // verify current PIN | 81dc9bdb52d04dc20036dbd8313ed055
        $current_pin = trim($request->current_pin);
        $merchant = Merchant::find($request->merchant_id);
        if(md5($current_pin) !== $merchant->pin){
            return response()->json([
                'code' => 3,
                'status' => 'failed',
                'message' => 'Current PIN is incorrect, check and try again!'
            ]);
        }
        $new_pin = md5($request->new_pin);
        Merchant::where('id', $request->merchant_id)->update(['pin' => $new_pin]);

        $desc = [
            'title' =>'Merchant PIN change',
            'data' => "PIN successfully changed for merchant ID: " . $request->merchant_id,
            'type' => 'merchant',
        ];

        $activity = new ActivityLog;
        $activity->user_id = session('current_org_user.id');// organisation user ID
        $activity->user_type = 'organisation';
        $activity->description = json_encode($desc);
        $activity->save();
            return response()->json([
                'code' => 1,
                'status' => 'success',
                'message' => 'PIN Successfully Changed!'
            ]);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {

        Models\Merchant::where('id', $id)->update([
            'status' => 'disabled',
        ]);

        $activity = new ActivityLog;
        $activity->user_id = session('current_org_user.id'); // organisation user ID
        $activity->user_type = 'organisation';
        $activity->description = 'disabled a merchant with ID : ' . $id ;
        $activity->save();

        return redirect()->to('organisation/merchant')->with('admin-sucsess', 'Successfully Disabled Merchant');
    }
    public function enable($id)
    {

        Models\Merchant::where('id', $id)->update([
            'status'=>'active',
        ]);

        $activity = new ActivityLog;
        $activity->user_id = session('current_org_user.id');
        $activity->user_type = 'organisation';
        $activity->description = 'enable a merchant with ID : ' . $id ;
        $activity->save();

        return redirect()->to('/organisation/merchant')->with('admin-sucsess', 'Successfully Enabled Merchant');
    }


    public function addTopUp(Request $request){

        // dd($request->all());

        $validator = Validator::make($request->all(), [

            'amount' => 'required',
            'payment'=>'required',
            'merchant'=>'required',

        ]);

        if($validator->fails()){
            return redirect()->back()->with('admin-error', 'Enter required data!');
        }

        $amount = $request->input('amount');
        $payment = $request->input('payment');
        $merchant = $request->input('merchant');

        $topup = new TopUp;
        $topup->amount = $amount;
        $topup->merchant_id = $merchant;
        $topup->created_by = $request->session()->get('current_org_user.id');
        $topup->payment_method = $payment;
        $save = $topup->save();

        //Update Merchant Amt //
        Models\Merchant::where('id', $merchant)->increment('balance', $amount);

        if ($save) {

            $merchant = Models\Merchant::find($merchant);

            $desc = [
                'title'=>'Added new Top Up',
                'data'=>'K ' .$topup->amount.' for '.$merchant->fullname.' payment by '.$payment,
                'type'=>'topup',
            ];

            $activity = new ActivityLog;
            $activity->user_id = $request->session()->get('current_org_user.id');
            $activity->user_type = 'organisation';
            $activity->description = json_encode($desc);
            $activity->save();

            return redirect()->to('/organisation/merchant/'.$merchant->id)->with('admin-sucsess', 'Successfully Added Top Up');

        } else {

            return redirect()->back()->with('admin-error', 'Error');
        }
    }


    public function transactions(){
        $merchant = session('merchant');
        // $transactions = Transaction::where('merchant_id', $merchant->id)->latest()->paginate(20);
        $data = [
            // 'transactions'=>$transactions,
            'merchant' => $merchant,
            'page_title' => 'Merchant Transactions',
        ];
        return view('merchants.transactions',$data);
    }
    public function getTransactionsJson(Request $request){
        $merchant_id = session('merchant.id');
        $transactions_arr = \DB::table('transactions')
            ->join('merchants', 'transactions.merchant_id', '=', 'merchants.id')
            ->select('merchants.fullname', 'transactions.id', 'transactions.status', 'transactions.msisdn', 'transactions.amount', 'transactions.created_at')
            ->whereRaw('transactions.merchant_id = '. $merchant_id)
            ->orderBy('transactions.created_at', 'DESC')
            ->paginate(20);

        if($request->has('keyword')){
            $queries = [];
            $keyword = $request->keyword;
            $queries['keyword'] = $keyword;
            $transactions_arr = \DB::table('transactions')
                // ->join('org_users', 'transactions.org_user_id', '=', 'org_users.id')
                ->join('merchants', 'transactions.merchant_id', '=', 'merchants.id')
                ->select('merchants.fullname', 'transactions.id', 'transactions.status', 'transactions.msisdn',  'transactions.amount', 'transactions.created_at')
                ->whereRaw("merchants.fullname LIKE '%$keyword%' OR transactions.msisdn LIKE '%$keyword%' OR transactions.status LIKE '%$keyword%' OR transactions.amount LIKE '%$keyword%' OR transactions.created_at LIKE '%$keyword%'")
                ->whereRaw('transactions.merchant_id = '. $merchant_id)
                ->orderBy('transactions.created_at', 'DESC')
                ->paginate(20)->appends($queries);
        }
        return response()->json($transactions_arr);
    }

    public function dealer_transactions(){
        $merchant = session('merchant');
        $data = [
            'merchant' => $merchant,
            'page_title' => 'Dealer Transactions',
        ];
        // dd($data);
        return view('merchants.dealer-transactions',$data);
    }
    public function getDealerListJson(Request $request){
        $merchant_id = session('merchant.id');
        $dealer_arr = \DB::table('organisations')->orderBy('organisations.created_at', 'DESC')->paginate(20);

        if($request->has('keyword')){
            $queries = [];
            $keyword = $request->keyword;
            $queries['keyword'] = $keyword;
            $dealer_arr = \DB::table('organisations')
                ->whereRaw("name LIKE '%$keyword%' OR phone LIKE '%$keyword%' OR status LIKE '%$keyword%' OR email LIKE '%$keyword%' OR created_at LIKE '%$keyword%'")
                ->orderBy('created_at', 'DESC')
                ->paginate(20)->appends($queries);
        }
        return response()->json($dealer_arr);
    }
    public function get_dealers(){
        $merchant = session('merchant');
        $data = [
            'merchant' => $merchant,
            'page_title' => 'Dealers',
        ];
        return view('merchants.dealer-list', $data);
    }
    public function getDealerTransactionsJson(Request $request){
        $merchantId = session('merchant.id');

        $query = \DB::table('merchant_top_ups')
            ->join('merchants', 'merchant_top_ups.merchant_id', '=', 'merchants.id')
            ->join('org_users', 'merchant_top_ups.org_user_id', '=', 'org_users.id')
            ->select([
                'merchants.fullname',
                'org_users.phone',
                'org_users.name',
                // 'merchant_top_ups.id',
                'merchant_top_ups.transaction_id',
                'merchant_top_ups.status',
                'merchant_top_ups.amount',
                'merchant_top_ups.created_at',
            ])
            ->where('merchant_top_ups.merchant_id', $merchantId)
            ->orderByDesc('merchant_top_ups.created_at');

        if ($request->filled('keyword')) {
            $keyword = $request->input('keyword');
            $like = '%' . $keyword . '%';

            $query->where(function ($q) use ($like, $keyword) {
                $q->where('org_users.phone', 'like', $like)
                  ->orWhere('org_users.name', 'like', $like)
                  ->orWhere('merchants.fullname', 'like', $like)
                  ->orWhere('merchant_top_ups.status', 'like', $like)
                  ->orWhere('merchant_top_ups.amount', 'like', $like)
                  ->orWhere('merchant_top_ups.created_at', 'like', $like);
            });
        }

        $transactions = $query->paginate(20);

        if ($request->filled('keyword')) {
            $transactions->appends(['keyword' => $request->input('keyword')]);
        }

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

    public function showCustomerTopForm(){
        
        //$merchant = Merchant::where('id',$id)->with('transactions')->get()[0];
        $data = [
            'page_title' => 'Customer Top Up',
             'page_title' => 'merchant_topups'
        ];
        return view('merchant.customer-topup',$data);
    }

    public function customerTopupStore(Request $request){
        $this->validate($request, [
            'phone_number'=> 'required|numeric',
            'amount' => 'required|numeric|min:1'
        ]);
        $phone_number = preg_replace('/[+\s]+/', '', $request->phone_number); // preg_replace('/\s+/', '', $request->phone_number);
        /*
        $check_phone = $this->validatePhoneNumber($phone_number);
        if ($check_phone == false) {
            return redirect()->back()->withInput()->with('admin-error', 'Invalid phone number!');
        }
        */
        $merchant_session = session('merchant');
        $merchant = Models\Merchant::find($merchant_session['id']);
        // dd($merchant);
        $country_prefix = substr($phone_number, 0, 3);
        // dd($country_prefix);
        $country = '';
        switch ($country_prefix) {
            case '265':
                $country = 'MALAWI';
                break;
            case '260':
                $country = 'ZAMBIA';
                break;
            
            default:
                $country = '';
                break;
        }
        if ($merchant->country !== $country) {
            // find out from team 
             return redirect()->back()->withInput()->with('admin-error', 'Country not allowed!');
        }
        $difference = $merchant->balance - $request->amount;
        if ($merchant->balance < $request->amount) {
            return redirect()->back()->withInput()->with('admin-error', 'Insufficient balance!');
        }
        $prev_balance = $merchant->balance;

        //get merchant ID, amount, msisdn,
        $extRefId = uniqid() . '-' . date('YmdHis');
        #$last_insert_id = saveTransaction($session_data['top_up_phone'], $session_data['top_up_amount'], $session_data['merchant_id'], $extRefId);
        $transaction_arr = [
           'msisdn' => $phone_number, 
           'amount' => $request->amount,
           'merchant_id' => $merchant->id, 
           'session_id' => $extRefId
        ];
        // dd($transaction_arr);
        $trans_result = Models\Transaction::create($transaction_arr);
        $transaction_id = $trans_result->id;
        
        $click_params = [
            "msisdn" => $phone_number,
            "amount" => $request->amount,
            "extRefId" => $extRefId
        ];
        \Log::info($click_params);
        //$merchant->orgInfo->api_email, $merchant->orgInfo->api_token
        $topup_result =  $this->ClickADPHttp($click_params); // Click ADP
        
        \Log::info($topup_result);

        $this->sendNtfy($topup_result);
        $topup_result_arr = json_decode($topup_result, TRUE);

        \Log::info($topup_result_arr);
        if ($topup_result == false) {
            return redirect()->back()->withInput()->with('admin-error', 'Top Up Could not be processed at this time. Try again later!');
        }
        $log_data = [
            'msisdn' => $phone_number,
            'amount' => $request->tamount,
            'user_id' => $merchant->id,
            'merchant_balance' => $merchant->balance,
            'session_id' => $extRefId,
            'status' => $topup_result_arr,
            'network' => 'n.a'
        ];
        $desc = [
            'title' =>'customer top up by Merchant ID ' . $merchant->id,
            'data' => $log_data,
            'type' => 'merchant',
        ];

        $activity = new ActivityLog;
        $activity->user_id = $merchant->id;
        $activity->user_type = 'merchant';
        $activity->description = json_encode($desc);
        $activity->save();


        if ($topup_result_arr['code'] == 1) {
            
            $merchant_update = Models\Merchant::find($merchant->id);
            $merchant_update->balance = $prev_balance - $request->amount;
            $merchant_update->save();
            $desc = [
                'title' =>'Successful customer top up by Merchant ID ' . $merchant->id,
                'data' => ['previous_balance' => $merchant->balance, 'current_balance' => $merchant->balance - $request->amount],
                'type' => 'merchant',
            ];
            #update transactions
            $transaction = Models\Transaction::find($transaction_id);
            $transaction->status = $topup_result_arr['message'];
            $transaction->save();

            $activity = new ActivityLog;
            $activity->user_id = $merchant->id;
            $activity->user_type = 'merchant';
            $activity->description = json_encode($desc);
            $activity->save();
            Session::flash('success_message', 'Top Up Successfully processed!');
            return redirect('merchant');
        }
        return redirect('merchant/transactions');
    }

    public function merchant_transactions($merchant){

        $transactions = Models\Transaction::where('merchant_id', $merchant->id)->select('id', 'created_at')->get()
                ->groupBy(function($date) {
                    //return Carbon::parse($date->created_at)->format('Y'); // grouping by years
                    return Carbon::parse($date->created_at)->format('m'); // grouping by months
                });
        $transactionmcount = [];
        $transactionArr = [];
        
        return response()->json(['transactions' => $transactions]);

        $pp = 1;
        $trans = [];
        foreach ($transactions as $value) {
            if ($pp == $value) {
                $trans[$pp]= $value;
            }
            else{
                $trans[$pp] = 0;
            }
            
        }
        foreach ($transactions as $key => $value) {
            $transactionmcount[(int)$key] = count($value);
        }
        for($i = 1; $i <= 12; $i++){
            if(!empty($transactionmcount[$i])){
                $transactionArr[$i] = $transactionmcount[$i];
            }else{
                $transactionArr[$i] = 0;
            }
        }

        $transactions = '';
        foreach ($transactionArr as $tran) {
            $transactions = $transactions.','.$tran;
        }
        return $transactions;
    }
    public function merchant_transactions_graph($merchant_id = 1){
        $transactions = Models\Transaction::where('merchant_id', $merchant_id)->pluck('amount', 'created_at');
        // return response()->json($transactions);
        // dump($transactions);
        return $transactions;

    }


    public function getActivity()
    {
        //
        $merchant = session('merchant');
        $activities = ActivityLog::with('admin')->where('user_type', 'merchant')->where('user_id', $merchant->id)
                ->orderBy('created_at', 'desc')->paginate(30);
        $data = [
            'activities' => $activities,
            'merchant' => $merchant,
            'page_title' => 'Merchant Activity Log'
        ];
        return view('merchants.activity', $data);
    }
}
