<?php

namespace App\Http\Controllers\Esme;

use App\DataTables\CampaignApiDatatable;
use App\DataTables\CampaignDatatable;
use App\DataTables\EsmeCampaignApiDatatable;
use App\DataTables\EsmeCampaignDatatable;
use App\DataTables\TmpGroupSmsDataTable;
use App\Http\Controllers\Controller;
use App\SmsImage;
use App\Tools\SmsTools;
use App\UserJob;
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\Redirect;
use Illuminate\Support\Facades\Session;
use Maatwebsite\Excel\Facades\Excel;

class CampaignController extends Controller
{
    public function view_campaigns(EsmeCampaignDatatable $dataTable) {
        return $dataTable->render('esme.campaign.index');
    }

    public function view_api_campaigns(EsmeCampaignApiDatatable $dataTable) {
        return $dataTable->render('esme.campaign.index_api');
    }

    public function get_campaign_analitics($id) {
        $user = Auth::user();
        $job = $user->jobs()->findOrFail($id);

        $data = DB::select('select `status`, count(*) as total from `sms_log` 
                            where `user_id`=? AND `job_id`=? GROUP BY `status`', [
            Auth::user()->id,
            $job->id
        ]);

        $tempArray = [];
        foreach ($data as $dat) {
            $status = $dat->status;
            $total = $dat->total;
            $tempArray["{$status}"] = $total;
        }

        $total_sms_sent = $user->sms_log()->where('job_id', $job->id)->count();

        $total_sms_delivered = isset($tempArray['DELIVRD']) ? $tempArray['DELIVRD']: 0;
        $total_sms_ack = isset($tempArray['ACK/']) ? $tempArray['ACK/'] : 0;
        $total_sms_undelivered = isset($tempArray['UNDELIV']) ? $tempArray['UNDELIV'] : 0;
        $total_sms_expired = isset($tempArray['EXPIRED']) ? $tempArray['EXPIRED'] : 0;

        //compute delivery time
//        $data = DB::select('select AVG (delivery_time) as delivery_time from `sms_log`
//                            where `user_id`=? AND `job_id`=?', [
//            Auth::user()->id,
//            $job->id
//        ]);
//        $delivery_time = empty($data[0]->delivery_time) ? 0 : $data[0]->delivery_time;

        $data = DB::select('select submit_date from `sms_log`
                            where `user_id`=? AND `job_id`=? 
                            ORDER BY submit_date DESC LIMIT 0,1', [
            Auth::user()->id,
            $job->id
        ]);
        $submit_date = empty($data[0]->submit_date) ? 0 : $data[0]->submit_date;

        $delivery_time = 0;
        if(!empty($submit_date) && !empty($job->created_at))
            $delivery_time = Carbon::parse($submit_date)->diffInSeconds(Carbon::parse($job->created_at));

        $delivery_time /= 60.0;
        $delivery_time = round($delivery_time, 2);

        //TODO: get user error
        $user_error = 0;
        $handset_error = 0;
        $operator_error = 0;

        return view('esme.campaignAnalytics', [
            'total_sms_sent' => $total_sms_sent,
            'total_sms_delivered' => $total_sms_delivered,
            'total_sms_ack' => $total_sms_ack,
            'total_sms_undelivered' => $total_sms_undelivered,
            'total_sms_expired' => $total_sms_expired,
            'delivery_time' => $delivery_time,
            'user_error' => $user_error,
            'handset_error' => $handset_error,
            'operator_error' => $operator_error
        ]);
    }

    public function get_campaign_analitics_api($date) {
        $user = Auth::user();
        $data = $user->sms_log()
                    ->where('originated', '=', 'mtnuser')
                    ->where(DB::raw('DATE(submit_date)'), $date)
                    ->select('status', DB::raw('count(*) total'))
                    ->groupBy('status')
                    ->get();


        $tempArray = [];
        foreach ($data as $dat) {
            $status = $dat->status;
            $total = $dat->total;
            $tempArray["{$status}"] = $total;
        }


        $total_sms_sent = $user->sms_log()
            ->where('originated', '=', 'mtnuser')
            ->where(DB::raw('DATE(submit_date)'), $date)->count();

        $total_sms_delivered = isset($tempArray['DELIVRD']) ? $tempArray['DELIVRD']: 0;
        $total_sms_ack = isset($tempArray['ACK/']) ? $tempArray['ACK/'] : 0;
        $total_sms_undelivered = isset($tempArray['UNDELIV']) ? $tempArray['UNDELIV'] : 0;
        $total_sms_expired = isset($tempArray['EXPIRED']) ? $tempArray['EXPIRED'] : 0;


        $data = $user->sms_log()
                    ->where('originated', '=', 'mtnuser')
            ->where(DB::raw('DATE(submit_date)'), $date)
            ->select('submit_date')
            ->orderBy('submit_date', 'DESC')
            ->take(1)
            ->get();

        $submit_date = empty($data[0]->submit_date) ? 0 : $data[0]->submit_date;

        $delivery_time = 0;
//        if(!empty($submit_date))
//            $delivery_time = Carbon::parse($submit_date)->diffInSeconds(Carbon::parse($job->created_at));

        $delivery_time /= 60.0;
        $delivery_time = round($delivery_time, 2);

        //TODO: get user error
        $user_error = 0;
        $handset_error = 0;
        $operator_error = 0;

        return view('esme.campaignAnalytics', [
            'total_sms_sent' => $total_sms_sent,
            'total_sms_delivered' => $total_sms_delivered,
            'total_sms_ack' => $total_sms_ack,
            'total_sms_undelivered' => $total_sms_undelivered,
            'total_sms_expired' => $total_sms_expired,
            'delivery_time' => $delivery_time,
            'user_error' => $user_error,
            'handset_error' => $handset_error,
            'operator_error' => $operator_error
        ]);
    }

    public function cancel_campaigns($id) {
        $job = Auth::user()->jobs()->findOrFail($id);
        $job->status = 'cancelled';
        $job->save();
        Session::flash('success', 'Your campaign has been cancelled!');
        return redirect()->back();
    }

    public function send_campaign_now($id) {
        $job = Auth::user()->jobs()->findOrFail($id);
        $job->status = 'pending';
        $job->sched_datetime = Carbon::now()->toDateTimeString();
        $job->save();
        Session::flash('success', 'Your message will be sent in a few seconds!');
        return redirect()->back();
    }

    public function update_campaign(Request $request, $id, TmpGroupSmsDataTable $dataTable) {
        $record = Auth::user()->jobs()->findOrFail($id);
        if($record->type == 'bulk') {
            return $this->update_bulk_sms($request, $id);
        }
        else if($record->type == 'group') {
            return $this->update_group_sms($request, $id, $dataTable);
        }
        else if($record->type == 'p_bulk') {
            return $this->update_personalised_bulk_sms($request, $id);
        }
        else if($record->type == 'p_group') {
            return $this->update_personalised_group_sms($request, $id, $dataTable);
        }
    }

    public function update_bulk_sms(Request $request, $id) {
        $user = Auth::user();
        $credit = $user->credit;

        $existing = $user->jobs()->findOrFail($id);

        //get current step
        $step = $request->get('step', 1);

        //process for step 1
        if($step == 1)
        {
            //validate the request
            $this->validate($request, [
//                'file_upload' => 'present',
                'sender_id' => 'required',
                'schedule_date' => 'present',
                'message_content' => 'required',
                'name' => 'present',
                'image_upload' => 'image'
            ]);
            $highestRow = 0;

            if(!empty($request['file_upload'])) {
                $current_filename = $request->file('file_upload')->getClientOriginalName();
                $filename_splitted = explode(".", $current_filename);
                $extension = end($filename_splitted);

                $destinationPath = storage_path() . DIRECTORY_SEPARATOR. 'bulk_sms' . DIRECTORY_SEPARATOR;
                $fileName = $user->username. '_'. date('YmdHis') . '.' . $extension;
                $full_filename = $destinationPath . $fileName;

                if ($request->file('file_upload')->isValid()) {
                    $request->file('file_upload')->move($destinationPath, $fileName);
                } else {
                    return Redirect::back()->withInput()->withErrors(array('file_upload' => 'Sorry, The file upload failed!'));
                }


                try {
                    Excel::load($full_filename, function ($reader)
                    use (&$highestRow) {
                        $objExcel = $reader->getExcel();
                        $sheet = $objExcel->getSheet(0);
                        $highestRow = $sheet->getHighestRow();
                    });
                } catch (\Exception $e) {
                    return Redirect::back()->withInput()->withErrors(array('file_upload' => 'Error! Your excel file is invalid!'));
                }
            } else {
                $highestRow = $existing->total_traffic;
                $full_filename = $existing->file_path;
            }

            //get data for step 2
            $no_chars = strlen($request->get('message_content'));
            $no_pages = SmsTools::no_pages($no_chars);

            $price = $credit->price;
            $cost = $no_pages * $price;
            // cost of sending one msg with this no_pages to one person
            $nummsisdn = $highestRow;
            // no of recepients
            $tot_cost = $cost * $nummsisdn;

            $curr_bal = $credit->new_bal;
            $credit_used = $credit->credit_used;

            $rem_sms = floor($curr_bal / $cost);
            //remaining sms user can send

            $counter = floor($rem_sms / $no_pages);
            $some_cost = $cost * $counter;

            $price_per_sms = $cost;
            $recipients = $nummsisdn;
            $total_price = $tot_cost;
            $credit_available = $curr_bal;

            $imgId = null;

            //update image if image exist
            if(!empty($request['image_upload'])) {
                if ($request->file('image_upload')->isValid()) {
                    $current_filename = $request->file('image_upload')->getClientOriginalName();
                    $fileMimeType = $request->file('image_upload')->getMimeType();

                    $destinationPath = storage_path() . DIRECTORY_SEPARATOR. 'uploads' . DIRECTORY_SEPARATOR;
                    $fileName = $user->username. '_' . $current_filename;
                    $request->file('image_upload')->move($destinationPath, $fileName);
                    $full_path = $destinationPath . $fileName;
                    while(1) {
                        $imgId = uniqid();
                        if(empty(SmsImage::find($imgId))) {
                            break;
                        }
                    }
                    $user->sms_images()->create([
                        'path' => $full_path,
                        'file_name' => $current_filename,
                        'mime_type' => $fileMimeType,
                        'id' => $imgId
                    ]);
                } else {
                    return Redirect::back()->withInput()->withErrors(array('image_upload' => 'Sorry, The file upload failed!'));
                }
            }

            $msg = $request->get('message_content');
            if(!empty($imgId)) {
                $sms_msg_url = route('sms_image', ['id'=>$imgId]);
                $msg = $request->get('message_content')."\n".$sms_msg_url;
            }

            //store user input in the new session data
            session(['bulk_sms_data'=>[
//                'phone_numbers' => $current_filename,
                'sender_id' => $request->get('sender_id'),
                'message_content' => $msg,
                'price_per_sms' => $price_per_sms,
                'recipients' => $recipients,
                'total_price' => $total_price,
                'credit_available' => $credit_available,
                'path' => $full_filename,
                'schedule_date' => Carbon::parse($request->get('schedule_date')),
                'name' => $request->get('name')
            ]]);
            $step=2;
        }
        //process for step 2
        else if($step==2)
        {
            //check if next button was pressed
            if($request->has('submit'))
            {
                $no_chars = strlen(session('bulk_sms_data')['message_content']);
                $sender = session('bulk_sms_data')['sender_id'];
                $nummsisdn = session('bulk_sms_data')['recipients'];
                $msgs = session('bulk_sms_data')['message_content'];
                $path = session('bulk_sms_data')['path'];
                $name = session('bulk_sms_data')['name'];

                $no_pages = SmsTools::no_pages($no_chars);

                $price = $credit->price;
                $cost = $no_pages * $price;
                $tot_cost = $cost * $nummsisdn;

                $curr_bal = $credit->new_bal;

                $rem_sms = floor($curr_bal / $cost);
                //remaining sms user can send

                if(isset(session('bulk_sms_data')['schedule_date']) && !empty(session('bulk_sms_data')['schedule_date'])) {
                    $sch_date = Carbon::parse(session('bulk_sms_data')['schedule_date']);
                    $now = Carbon::now()->addMinutes(1);
                    $date = $now->lte($sch_date) ? $sch_date : $now;
                } else {
                    $date = Carbon::now()->addMinutes(1);
                }

                if ($curr_bal >= $tot_cost) {
                    //TODO: Create a job
                    $existing->update([
                        'sender' => $sender,
                        'message' => $msgs,
                        'sms_count' => $no_pages,
                        'sched_datetime' => $date,
                        'status' => 'pending',
                        'created_by' => $user->username,
                        'file_path' => $path,
                        'name' => $name,
                        'total_traffic' => $nummsisdn
                    ]);

//                    //update audit trails
//                    $user->audit_trails()->create([
//                        'username' => $user->username,
//                        'date' => Carbon::now()->toDateTimeString(),
//                        'activity' => $user->username.' updated a bulk sms to '.$nummsisdn.' msisdn'
//                    ]);

                    $request->session()->flash('success', 'Your campaign was successfully updated!');
                } else {
                    return Redirect::back()->withInput()->withErrors(array('error' => 'Sorry, you don\'t have enough credit to proceed!'));
                }

                //reset session
                $step=0;
                $request->session()->forget('bulk_sms_data');
                if(!$request->session()->has('success') || empty(session('success')))
                    $request->session()->flash('success', 'Your campaign was successfully updated!');
            }
            //in case back button was pressed
            else
            {
                //go back to step 1
                $step=1;
            }
        }

        return view('esme.campaign.send_bulk_sms', ['step'=>$step]);
    }

    public function update_group_sms(Request $request, $id, TmpGroupSmsDataTable $dataTable) {
        //get current user
        $user = Auth::user();
        $credit = $user->credit;

        $existing = $user->jobs()->findOrFail($id);

        //get current step
        $step = $request->get('step', 1);

        //process for step 1
        if($step == 1)
        {
            //validate the request
            $this->validate($request, [
                'selected_group' => 'required',
                'sender_id' => 'required',
                'schedule_date' => 'present',
                'message_content' => 'required',
                'name' => 'present',
                'image_upload' => 'image'
            ]);

            $highestRow = 0;
            $selected_groups = $request->get('selected_group');
            $group_name = '';
            $data = [];

            DB::beginTransaction();
            $user->tmp_group_sms()->delete();

            if(!empty($selected_groups))
                foreach ($selected_groups as $group_id) {
                    $group = $user->groups()->find($group_id);
                    if(!empty($group)) {
                        $group_name .= ($group->name.', ');
                        $highestRow += $group->contacts()->count();
                        $group->contacts()->chunk(5000, function($contacts)
                        use(&$user){
                            foreach ($contacts as $contact) {
                                $existing = DB::table('tmp_group_sms')->where([
                                    ['user_id', '=', $user->id],
                                    ['msisdn', '=', $contact->phone_number]
                                ])->first();

                                if(empty($existing)) {
                                    DB::table('tmp_group_sms')->insert([
                                        'user_id' => $user->id,
                                        'name' => $contact->name,
                                        'msisdn' => $contact->phone_number
                                    ]);
                                }
                            }
                        });
                    }
                }
            DB::commit();

            $imgId = null;

            //update image if image exist
            if(!empty($request['image_upload'])) {
                if ($request->file('image_upload')->isValid()) {
                    $current_filename = $request->file('image_upload')->getClientOriginalName();
                    $fileMimeType = $request->file('image_upload')->getMimeType();

                    $destinationPath = storage_path() . DIRECTORY_SEPARATOR. 'uploads' . DIRECTORY_SEPARATOR;
                    $fileName = $user->username. '_' . $current_filename;
                    $request->file('image_upload')->move($destinationPath, $fileName);
                    $full_path = $destinationPath . $fileName;
                    while(1) {
                        $imgId = uniqid();
                        if(empty(SmsImage::find($imgId))) {
                            break;
                        }
                    }
                    $user->sms_images()->create([
                        'path' => $full_path,
                        'file_name' => $current_filename,
                        'mime_type' => $fileMimeType,
                        'id' => $imgId
                    ]);
                } else {
                    return Redirect::back()->withInput()->withErrors(array('image_upload' => 'Sorry, The file upload failed!'));
                }
            }

            $msg = $request->get('message_content');
            if(!empty($imgId)) {
                $sms_msg_url = route('sms_image', ['id'=>$imgId]);
                $msg = $request->get('message_content')."\n".$sms_msg_url;
            }

            //store user input in the new session data
            session(['group_sms_data'=>[
                'group_name' => $group_name,
                'sender_id' => $request->get('sender_id'),
                'message_content' => $msg,
                'groups' => $selected_groups,
                'schedule_date' => Carbon::parse($request->get('schedule_date')),
                'name' => $request->get('name'),
                'selected_group' => $request->get('selected_group')
            ]]);
            $step=2;
        }
        //process for step 2
        else if($step==2)
        {
            //check if next button was pressed
            if($request->has('next'))
            {
                $highestRow = $user->tmp_group_sms()->count();
                //check if user can send sms
                if ($highestRow>0) {
                    //do the calculation and move to step 3
                    //get data for step 2
                    $no_chars = strlen(session('group_sms_data')['message_content']);
                    $no_pages = SmsTools::no_pages($no_chars);

                    $price = $credit->price;
                    $cost = $no_pages * $price;
                    // cost of sending one msg with this no_pages to one person
                    $nummsisdn = $highestRow;
                    // no of recepients
                    $tot_cost = $cost * $nummsisdn;

                    $curr_bal = $credit->new_bal;
                    $credit_used = $credit->credit_used;

                    $rem_sms = floor($curr_bal / $cost);
                    //remaining sms user can send

                    $counter = floor($rem_sms / $no_pages);
                    $some_cost = $cost * $counter;

                    $price_per_sms = $cost;
                    $recipients = $nummsisdn;
                    $total_price = $tot_cost;
                    $credit_available = $curr_bal;

                    session(['group_sms_data'=>[
                        'group_name' => session('group_sms_data')['group_name'],
                        'sender_id' => session('group_sms_data')['sender_id'],
                        'message_content' => session('group_sms_data')['message_content'],
                        'groups' => session('group_sms_data')['groups'],
                        'price_per_sms' => $price_per_sms,
                        'recipients' => $recipients,
                        'total_price' => $total_price,
                        'credit_available' => $credit_available,
                        'schedule_date' => session('group_sms_data')['schedule_date'],
                        'name' =>session('group_sms_data')['name'],
                        'selected_group' => session('group_sms_data')['selected_group'],
                    ]]);

                    //move to step 3
                    $step = 3;
                } else {
                    //prevent user from access step3
                    $request->session()->flash('error_msg', 'Kindly add some phone number(s)');
                    $step = 2;
                }
            }
            else if($request->has('add_msisdn_btn')) {
                $input = $request->get('add_msisdn_input');
                if(empty(trim($input))) {
                    $request->session()->flash('error_msg', 'Kindly enter the msisdn to be added');
                }

                $tmp_msisdn_list = explode(',', $input);
                $added = 0;
                if(!empty($tmp_msisdn_list))
                    foreach ($tmp_msisdn_list as $temp) {
                        $temp = trim($temp);
                        if(!empty($temp)) {
                            if(!empty($user->tmp_group_sms()->where('msisdn', $temp)->first())) {
                                $request->session()->flash('error_msg', $temp.' already exists in the list!');
                                break;
                            }
                            $user->tmp_group_sms()->create(['msisdn' => $temp]);
                            $added++;
                        }
                    }
                if($added>0)
                    $request->session()->flash('success_msg', $added.' msisdn added to the list!');
                $step=2;
            }
            else if($request->has('delete_item')) {
                $input = $request->get('delete_item');
                $contact = $user->tmp_group_sms()->where('msisdn', $input)->first();
                if(!empty($contact)) {
                    $contact->delete();
                    $request->session()->flash('success_msg', $input.' was deleted from the list!');
                } else {
                    $request->session()->flash('error_msg', $input.' not found in the list!');
                }
                $step=2;
            }
            else if($request->has('delete_selection')) {
                $selection = $request->get('selection');
                $deleted = 0;
                if(!empty($selection))
                    foreach ($selection as $msisdn) {
                        $contact = $user->tmp_group_sms()->where('msisdn', $msisdn)->first();
                        if(!empty($contact)) {
                            $contact->delete();
                            $deleted++;
                        } else {
                            $request->session()->flash('error_msg', $msisdn.' not found in the list!');
                        }
                    }
                if($deleted>0)
                    $request->session()->flash('success_msg', $deleted.' msisdn deleted from the list!');
                $step = 2;
            }
            //in case back button was pressed
            else if($request->has('back'))
            {
                //go back to step 1
                $step=1;
            }
        }
        else if($step==3)
        {
            //check if next button was pressed
            if($request->has('submit'))
            {
                $no_chars = strlen(session('group_sms_data')['message_content']);
                $sender = session('group_sms_data')['sender_id'];
                $nummsisdn = session('group_sms_data')['recipients'];
                $msgs = session('group_sms_data')['message_content'];
                $name = session('group_sms_data')['name'];
                $group_ids = implode(",", session('group_sms_data')['selected_group']);

                $no_pages = SmsTools::no_pages($no_chars);

                $price = $credit->price;
                $cost = $no_pages * $price;
                $tot_cost = $cost * $nummsisdn;

                $curr_bal = $credit->new_bal;

                $rem_sms = floor($curr_bal / $cost);
                //remaining sms user can send

                if(isset(session('group_sms_data')['schedule_date']) && !empty(session('group_sms_data')['schedule_date'])) {
                    $sch_date = Carbon::parse(session('group_sms_data')['schedule_date']);
                    $now = Carbon::now()->addMinutes(1);
                    $date = $now->lte($sch_date) ? $sch_date : $now;
                } else {
                    $date = Carbon::now()->addMinutes(1);
                }

                if ($curr_bal >= $tot_cost) {
                    //copy msisdn to excel file and add it to the pending job list
                    $destinationPath = storage_path('bulk_sms');
                    $fileName = $user->username. '_'. date('YmdHis');

                    try {
                        $res = Excel::create($fileName, function($excel) use (&$user) {
                            // Set the title
                            $excel->setTitle('GROUP SMS Details');
                            // Chain the setters
                            $excel->setCreator('Alphonse')->setCompany('Npontu');
                            $excel->setDescription('Send Group SMS Details');

                            $excel->sheet('Msisdn', function ($sheet) use (&$user) {
                                $sheet->setOrientation('landscape');
                                $i = 0;
                                DB::beginTransaction();
                                $data = $user->tmp_group_sms()->get();
                                foreach ($data as $dat) {
                                    $i++;
                                    $sheet->appendRow($i, [$dat->msisdn]);
                                }
                                $user->tmp_group_sms()->delete();
                                DB::commit();
                            });
                        })->store('xls', $destinationPath, true);

                    } catch (\Exception $e) {
                        $request->session()->flash('error_msg', 'Sorry, an error occurred while scheduling the blast!');
                        Log::error($e->getMessage());
                        $step = 3;
                        return view('esme.sms.send_group_sms', ['step' => $step]);
                    }

                    $existing->update([
                        'sender' => $sender,
                        'message' => $msgs,
                        'sms_count' => $no_pages,
                        'sched_datetime' => $date,
                        'status' => 'pending',
                        'file_path' => $res['full'],
                        'name' => $name,
                        'total_traffic' => $nummsisdn,
                        'group_ids' => $group_ids
                    ]);

//                    //update audit trails
//                    $user->audit_trails()->create([
//                        'username' => $user->username,
//                        'date' => Carbon::now()->toDateTimeString(),
//                        'activity' => $user->username.' sent a group sms to '.$nummsisdn.' msisdn'
//                    ]);

                    $request->session()->flash('success', 'Your campaign was successfully updated!');
                } else {
                    $request->session()->flash('error_msg', 'Sorry, you don\'t have enough credit to proceed!');
                }

                //reset session
                $step=0;
                $request->session()->forget('group_sms_data');
                if(!$request->session()->has('success') || empty(session('success')))
                    $request->session()->flash('success', 'Your campaign was successfully updated!');
            }
            //in case back button was pressed
            else
            {
                //go back to step 1
                $step=2;
            }
        }

        if($step==1) {
            //fetch user groups
            $groups = $request->user()->groups()->orderBy('name', 'asc')->get(['name', 'id']);
            return view('esme.sms.send_group_sms', ['step' => $step, 'groups'=>$groups]);
        }
        else if($step==2) {
            return $dataTable->render('esme.sms.send_group_sms', ['step'=>$step]);
        } else {
            return view('esme.sms.send_group_sms', ['step' => $step]);
        }
    }

    public function update_personalised_bulk_sms(Request $request, $id) {
        //get current user
        $user = Auth::user();
        $credit = $user->credit;

        $existing = $user->jobs()->findOrFail($id);

        //get current step
        $step = $request->get('step', 1);

        //process for step 1
        if($step == 1)
        {
            //validate the request
            $this->validate($request, [
//                'file_upload' => 'required',
                'sender_id' => 'required',
                'schedule_date' => 'present',
                'name' => 'present',
                'image_upload' => 'image'
            ]);
            $highestRow = 0;
            $headers = [];

            if(!empty($request['file_upload'])) {
                $current_filename = $request->file('file_upload')->getClientOriginalName();
                $filename_splitted = explode(".", $current_filename);
                $extension = end($filename_splitted);

                $destinationPath = storage_path() . DIRECTORY_SEPARATOR . 'bulk_sms' . DIRECTORY_SEPARATOR;
                $fileName = $user->username . '_' . date('YmdHis') . '.' . $extension;
                $full_filename = $destinationPath . $fileName;

                if ($request->file('file_upload')->isValid()) {
                    $request->file('file_upload')->move($destinationPath, $fileName);
                } else {
                    return Redirect::back()->withInput()->withErrors(array('file_upload' => 'Sorry, The file upload failed!'));
                }

                try {
                    Excel::load($full_filename, function ($reader)
                    use (&$highestRow, &$headers) {
                        $objExcel = $reader->getExcel();
                        $sheet = $objExcel->getSheet(0);
                        $highestRow = $sheet->getHighestRow();
                        $highestColumn = $sheet->getHighestColumn();
                        //  Read a row of data into an array
                        $rowData = $sheet->rangeToArray('A' . 1 . ':' . $highestColumn . 1, NULL, TRUE, FALSE);
                        $row = $rowData[0];
                        foreach ($row as $header)
                            $headers[] = $header;
                    });
                } catch (\Exception $e) {
                    return Redirect::back()->withInput()->withErrors(array('file_upload' => 'Error! Your excel file is invalid!'));
                }
            } else {
                $highestRow = $existing->total_traffic;
                $full_filename = $existing->file_path;
                try {
                    Excel::load($full_filename, function ($reader)
                    use (&$highestRow, &$headers) {
                        $objExcel = $reader->getExcel();
                        $sheet = $objExcel->getSheet(0);
                        $highestRow = $sheet->getHighestRow();
                        $highestColumn = $sheet->getHighestColumn();
                        //  Read a row of data into an array
                        $rowData = $sheet->rangeToArray('A' . 1 . ':' . $highestColumn . 1, NULL, TRUE, FALSE);
                        $row = $rowData[0];
                        foreach ($row as $header)
                            $headers[] = $header;
                    });
                } catch (\Exception $e) {
                    return Redirect::back()->withInput()->withErrors(array('file_upload' => 'Error! Your excel file is invalid!'));
                }
            }

            // cost of sending one msg with this no_pages to one person
            $nummsisdn = $highestRow;

            $recipients = $nummsisdn;

            $imgId = null;

            //update image if image exist
            if(!empty($request['image_upload'])) {
                if ($request->file('image_upload')->isValid()) {
                    $current_filename = $request->file('image_upload')->getClientOriginalName();
                    $fileMimeType = $request->file('image_upload')->getMimeType();

                    $destinationPath = storage_path() . DIRECTORY_SEPARATOR. 'uploads' . DIRECTORY_SEPARATOR;
                    $fileName = $user->username. '_' . $current_filename;
                    $request->file('image_upload')->move($destinationPath, $fileName);
                    $full_path = $destinationPath . $fileName;
                    while(1) {
                        $imgId = uniqid();
                        if(empty(SmsImage::find($imgId))) {
                            break;
                        }
                    }
                    $user->sms_images()->create([
                        'path' => $full_path,
                        'file_name' => $current_filename,
                        'mime_type' => $fileMimeType,
                        'id' => $imgId
                    ]);
                } else {
                    return Redirect::back()->withInput()->withErrors(array('image_upload' => 'Sorry, The file upload failed!'));
                }
            }

            $msg = '';
            if(!empty($imgId)) {
                $sms_msg_url = route('sms_image', ['id'=>$imgId]);
                $msg = "\n".$sms_msg_url;
            }

            //store user input in the new session data
            session(['bulk_sms_personalised_data'=>[
                'sender_id' => $request->get('sender_id'),
                'recipients' => $recipients,
                'path' => $full_filename,
                'schedule_date' => Carbon::parse($request->get('schedule_date')),
                'headers' => $headers,
                'name' => $request->get('name'),
                'msg' => $msg,
                'message_content' => session('bulk_sms_personalised_data')['message_content']
            ]]);
            $step=2;
        }
        //process for step 2
        else if($step==2)
        {
            //check if next button was pressed
            if($request->has('next'))
            {
                $message = trim($request->get('message_content')).session('bulk_sms_personalised_data')['msg'];
                if(empty($message)) {
                    $step=2;
                    $request->session()->flash('error_msg', 'Kindly enter the text message!');
                } else {
                    //get data for step 2
                    $no_chars = strlen($message);
                    $no_pages = SmsTools::no_pages($no_chars);

                    $price = $credit->price;
                    $cost = $no_pages * $price;
                    // cost of sending one msg with this no_pages to one person
                    $nummsisdn = session('bulk_sms_personalised_data')['recipients'];
                    // no of recepients
                    $tot_cost = $cost * $nummsisdn;

                    $curr_bal = $credit->new_bal;
                    $credit_used = $credit->credit_used;

                    $rem_sms = floor($curr_bal / $cost);
                    //remaining sms user can send

                    $counter = floor($rem_sms / $no_pages);
                    $some_cost = $cost * $counter;

                    $price_per_sms = $cost;
                    $recipients = $nummsisdn;
                    $total_price = $tot_cost;
                    $credit_available = $curr_bal;

                    //store user input in the new session data
                    session(['bulk_sms_personalised_data'=>[
                        'sender_id' => session('bulk_sms_personalised_data')['sender_id'],
                        'message_content' => $message,
                        'price_per_sms' => $price_per_sms,
                        'recipients' => $recipients,
                        'total_price' => $total_price,
                        'credit_available' => $credit_available,
                        'path' => session('bulk_sms_personalised_data')['path'],
                        'schedule_date' => session('bulk_sms_personalised_data')['schedule_date'],
                        'headers' => session('bulk_sms_personalised_data')['headers'],
                        'name' => session('bulk_sms_personalised_data')['name'],
                    ]]);
                    $step = 3;
                }
            }
            //in case back button was pressed
            else
            {
                //go back to step 1
                $step=1;
            }
        }

        else if($step==3)
        {
            //check if next button was pressed
            if($request->has('submit'))
            {
                $no_chars = strlen(session('bulk_sms_personalised_data')['message_content']);
                $sender = session('bulk_sms_personalised_data')['sender_id'];
                $nummsisdn = session('bulk_sms_personalised_data')['recipients'];
                $msgs = session('bulk_sms_personalised_data')['message_content'];
                $path = session('bulk_sms_personalised_data')['path'];
                $name = session('bulk_sms_personalised_data')['name'];

                $no_pages = SmsTools::no_pages($no_chars);

                $price = $credit->price;
                $cost = $no_pages * $price;
                $tot_cost = $cost * $nummsisdn;

                $curr_bal = $credit->new_bal;

                $rem_sms = floor($curr_bal / $cost);
                //remaining sms user can send

                if(isset(session('bulk_sms_personalised_data')['schedule_date']) && !empty(session('bulk_sms_personalised_data')['schedule_date'])) {
                    $sch_date = Carbon::parse(session('bulk_sms_personalised_data')['schedule_date']);
                    $now = Carbon::now()->addMinutes(1);
                    $date = $now->lte($sch_date) ? $sch_date : $now;
                } else {
                    $date = Carbon::now()->addMinutes(1);
                }

                if ($curr_bal >= $tot_cost) {
                    //TODO: Create a job
                    $existing->update([
                        'sender' => $sender,
                        'message' => $msgs,
                        'sms_count' => $no_pages,
                        'type' => 'p_bulk',
                        'sched_datetime' => $date,
                        'status' => 'pending',
                        'file_path' => $path,
                        'name' =>$name,
                        'total_traffic' => $nummsisdn
                    ]);

                    //update audit trails
//                    $user->audit_trails()->create([
//                        'username' => $user->username,
//                        'date' => Carbon::now()->toDateTimeString(),
//                        'activity' => $user->username.' sent a personalised bulk sms to '.$nummsisdn.' msisdn'
//                    ]);

                    $request->session()->flash('success', 'Your campaign was successfully updated!');
                } else {
                    return Redirect::back()->withInput()->withErrors(array('error' => 'Sorry, you don\'t have enough credit to proceed!'));
                }

                //reset session
                $step=0;
                $request->session()->forget('bulk_sms_personalised_data');
                if(!$request->session()->has('success') || empty(session('success')))
                    $request->session()->flash('success', 'Your campaign was successfully updated!');
            }
            //in case back button was pressed
            else
            {
                //go back to step 1
                $step=2;
            }
        }

        return view('esme.campaign.send_bulk_personalised_sms', ['step'=>$step]);
    }

    public function update_personalised_group_sms(Request $request, $id, TmpGroupSmsDataTable $dataTable) {
        //get current user
        $user = Auth::user();
        $credit = $user->credit;

        $existing = $user->jobs()->findOrFail($id);

        //get current step
        $step = $request->get('step', 1);

        //process for step 1
        if($step == 1)
        {
            //validate the request
            $this->validate($request, [
                'selected_group' => 'required',
                'sender_id' => 'required',
                'schedule_date' => 'present',
                'name' => 'present',
                'image_upload' => 'image'
            ]);

            $highestRow = 0;
            $selected_groups = $request->get('selected_group');
            $group_name = '';
            $counter = 0;

            DB::beginTransaction();
            $user->tmp_group_sms()->delete();

            if(!empty($selected_groups))
                foreach ($selected_groups as $group_id) {
                    $group = $user->groups()->find($group_id);
                    if(!empty($group)) {
                        $group_name .= ($group->name.', ');
                        $highestRow += $group->contacts()->count();
                        $group->contacts()->chunk(5000, function($contacts)
                        use(&$user, &$counter){
                            foreach ($contacts as $contact) {
                                $existing = DB::table('tmp_group_sms')->where([
                                    ['user_id', '=', $user->id],
                                    ['msisdn', '=', $contact->phone_number]
                                ])->first();

                                if(empty($existing)) {
                                    $counter++;
                                    DB::table('tmp_group_sms')->insert([
                                        'user_id' => $user->id,
                                        'name' => $contact->name,
                                        'msisdn' => $contact->phone_number
                                    ]);
                                }
                            }
                        });
                    }
                }
            DB::commit();

            $imgId = null;

            //update image if image exist
            if(!empty($request['image_upload'])) {
                if ($request->file('image_upload')->isValid()) {
                    $current_filename = $request->file('image_upload')->getClientOriginalName();
                    $fileMimeType = $request->file('image_upload')->getMimeType();

                    $destinationPath = storage_path() . DIRECTORY_SEPARATOR. 'uploads' . DIRECTORY_SEPARATOR;
                    $fileName = $user->username. '_' . $current_filename;
                    $request->file('image_upload')->move($destinationPath, $fileName);
                    $full_path = $destinationPath . $fileName;
                    while(1) {
                        $imgId = uniqid();
                        if(empty(SmsImage::find($imgId))) {
                            break;
                        }
                    }
                    $user->sms_images()->create([
                        'path' => $full_path,
                        'file_name' => $current_filename,
                        'mime_type' => $fileMimeType,
                        'id' => $imgId
                    ]);
                } else {
                    return Redirect::back()->withInput()->withErrors(array('image_upload' => 'Sorry, The file upload failed!'));
                }
            }

            $msg = '';
            if(!empty($imgId)) {
                $sms_msg_url = route('sms_image', ['id'=>$imgId]);
                $msg = "\n".$sms_msg_url;
            }

            //store user input in the new session data
            session(['group_sms_personalised_data' => [
                'group_name' => $group_name,
                'sender_id' => $request->get('sender_id'),
                'groups' => $selected_groups,
                'schedule_date' => Carbon::parse($request->get('schedule_date')),
                'name' => $request->get('name'),
                'msg' => $msg,
                'recipients' => $counter,
                'selected_group' => $request->get('selected_group'),
                'message_content' => session('group_sms_personalised_data')['message_content']
            ]]);
            $step=2;
        }
        //process for step 2
        else if($step==2)
        {
            //check if next button was pressed
            if($request->has('next'))
            {
                $message = trim($request->get('message_content')).session('group_sms_personalised_data')['msg'];
                if(empty($message)) {
                    $step=2;
                    $request->session()->flash('error_msg', 'Kindly enter the text message!');
                } else {
                    //get data for step 2
                    $no_chars = strlen($message);
                    $no_pages = SmsTools::no_pages($no_chars);

                    $price = $credit->price;
                    $cost = $no_pages * $price;
                    // cost of sending one msg with this no_pages to one person
                    $nummsisdn = session('group_sms_personalised_data')['recipients'];
                    // no of recepients
                    $tot_cost = $cost * $nummsisdn;

                    $curr_bal = $credit->new_bal;

                    $rem_sms = floor($curr_bal / $cost);
                    //remaining sms user can send

                    $counter = floor($rem_sms / $no_pages);

                    $price_per_sms = $cost;
                    $recipients = $nummsisdn;
                    $total_price = $tot_cost;
                    $credit_available = $curr_bal;

                    //store user input in the new session data
                    session(['group_sms_personalised_data'=>[
                        'group_name' => session('group_sms_personalised_data')['group_name'],
                        'sender_id' => session('group_sms_personalised_data')['sender_id'],
                        'message_content' => $message,
                        'price_per_sms' => $price_per_sms,
                        'recipients' => $recipients,
                        'total_price' => $total_price,
                        'credit_available' => $credit_available,
                        'groups' => session('group_sms_personalised_data')['groups'],
                        'schedule_date' => session('group_sms_personalised_data')['schedule_date'],
                        'name' => session('group_sms_personalised_data')['name'],
                        'selected_group' => session('group_sms_personalised_data')['selected_group'],
                    ]]);
                    $step = 3;
                }
            }
            //in case back button was pressed
            else
            {
                //go back to step 1
                $step=1;
            }
        }

        //process for step 2
        else if($step==3)
        {
            //check if next button was pressed
            if($request->has('next'))
            {
                $highestRow = $user->tmp_group_sms()->count();
                //check if user can send sms
                if ($highestRow>0) {
                    //do the calculation and move to step 3
                    //get data for step 2
                    $no_chars = strlen(session('group_sms_personalised_data')['message_content']);
                    $no_pages = SmsTools::no_pages($no_chars);

                    $price = $credit->price;
                    $cost = $no_pages * $price;
                    // cost of sending one msg with this no_pages to one person
                    $nummsisdn = $highestRow;
                    // no of recepients
                    $tot_cost = $cost * $nummsisdn;

                    $curr_bal = $credit->new_bal;
                    $credit_used = $credit->credit_used;

                    $rem_sms = floor($curr_bal / $cost);
                    //remaining sms user can send

                    $counter = floor($rem_sms / $no_pages);
                    $some_cost = $cost * $counter;

                    $price_per_sms = $cost;
                    $recipients = $nummsisdn;
                    $total_price = $tot_cost;
                    $credit_available = $curr_bal;

                    session(['group_sms_personalised_data'=>[
                        'group_name' => session('group_sms_personalised_data')['group_name'],
                        'sender_id' => session('group_sms_personalised_data')['sender_id'],
                        'message_content' => session('group_sms_personalised_data')['message_content'],
                        'groups' => session('group_sms_personalised_data')['groups'],
                        'price_per_sms' => $price_per_sms,
                        'recipients' => $recipients,
                        'total_price' => $total_price,
                        'credit_available' => $credit_available,
                        'schedule_date' => session('group_sms_personalised_data')['schedule_date'],
                        'name' => session('group_sms_personalised_data')['name'],
                        'selected_group' => session('group_sms_personalised_data')['selected_group'],
                    ]]);

                    //move to step 3
                    $step = 4;
                } else {
                    //prevent user from access step3
                    $request->session()->flash('error_msg', 'Kindly add some phone number(s)');
                    $step = 3;
                }
            }
            else if($request->has('add_msisdn_btn')) {
                $input = $request->get('add_msisdn_input');
                if(empty(trim($input))) {
                    $request->session()->flash('error_msg', 'Kindly enter the msisdn to be added');
                }

                $tmp_msisdn_list = explode(',', $input);
                $added = 0;
                if(!empty($tmp_msisdn_list))
                    foreach ($tmp_msisdn_list as $temp) {
                        $temp = trim($temp);
                        if(!empty($temp)) {
                            if(!empty($user->tmp_group_sms()->where('msisdn', $temp)->first())) {
                                $request->session()->flash('error_msg', $temp.' already exists in the list!');
                                break;
                            }
                            $user->tmp_group_sms()->create(['msisdn' => $temp]);
                            $added++;
                        }
                    }
                if($added>0)
                    $request->session()->flash('success_msg', $added.' msisdn added to the list!');
                $step=3;
            }
            else if($request->has('delete_item')) {
                $input = $request->get('delete_item');
                $contact = $user->tmp_group_sms()->where('msisdn', $input)->first();
                if(!empty($contact)) {
                    $contact->delete();
                    $request->session()->flash('success_msg', $input.' was deleted from the list!');
                } else {
                    $request->session()->flash('error_msg', $input.' not found in the list!');
                }
                $step=3;
            }
            else if($request->has('delete_selection')) {
                $selection = $request->get('selection');
                $deleted = 0;
                if(!empty($selection))
                    foreach ($selection as $msisdn) {
                        $contact = $user->tmp_group_sms()->where('msisdn', $msisdn)->first();
                        if(!empty($contact)) {
                            $contact->delete();
                            $deleted++;
                        } else {
                            $request->session()->flash('error_msg', $msisdn.' not found in the list!');
                        }
                    }
                if($deleted>0)
                    $request->session()->flash('success_msg', $deleted.' msisdn deleted from the list!');
                $step = 3;
            }
            //in case back button was pressed
            else if($request->has('back'))
            {
                //go back to step 1
                $step=2;
            }
        }
        else if($step==4)
        {
            //check if next button was pressed
            if($request->has('submit'))
            {
                $no_chars = strlen(session('group_sms_personalised_data')['message_content']);
                $sender = session('group_sms_personalised_data')['sender_id'];
                $nummsisdn = session('group_sms_personalised_data')['recipients'];
                $msgs = session('group_sms_personalised_data')['message_content'];
                $name = session('group_sms_personalised_data')['name'];
                $group_ids = implode(",", session('group_sms_personalised_data')['selected_group']);

                $no_pages = SmsTools::no_pages($no_chars);

                $price = $credit->price;
                $cost = $no_pages * $price;
                $tot_cost = $cost * $nummsisdn;

                $curr_bal = $credit->new_bal;

                $rem_sms = floor($curr_bal / $cost);
                //remaining sms user can send

                if(isset(session('group_sms_personalised_data')['schedule_date']) && !empty(session('group_sms_personalised_data')['schedule_date'])) {
                    $sch_date = Carbon::parse(session('group_sms_personalised_data')['schedule_date']);
                    $now = Carbon::now()->addMinutes(1);
                    $date = $now->lte($sch_date) ? $sch_date : $now;
                } else {
                    $date = Carbon::now()->addMinutes(1);
                }

                if ($curr_bal >= $tot_cost) {
                    //copy msisdn to excel file and add it to the pending job list
                    $destinationPath = storage_path('bulk_sms');
                    $fileName = $user->username. '_'. date('YmdHis');

                    try {
                        $res = Excel::create($fileName, function($excel) use (&$user) {
                            // Set the title
                            $excel->setTitle('GROUP SMS Details');
                            // Chain the setters
                            $excel->setCreator('Alphonse')->setCompany('Npontu');
                            $excel->setDescription('Send Group SMS Details');

                            $excel->sheet('Msisdn', function ($sheet) use (&$user) {
                                $sheet->setOrientation('landscape');
                                $i = 1;
                                DB::beginTransaction();
                                $data = $user->tmp_group_sms()->get();
                                $sheet->appendRow($i, ['Number', 'Name']);
                                foreach ($data as $dat) {
                                    $i++;
                                    $sheet->appendRow($i, [$dat->msisdn, empty($dat->name) ? '': $dat->name]);
                                }
                                $user->tmp_group_sms()->delete();
                                DB::commit();
                            });
                        })->store('xls', $destinationPath, true);

                    } catch (\Exception $e) {
                        $request->session()->flash('error_msg', 'Sorry, an error occurred while scheduling the blast!');
                        Log::error($e->getMessage());
                        $step = 4;
                        return view('esme.campaign.send_personalised_group_sms', ['step' => $step]);
                    }

                    $existing->update([
                        'username' => $user->username,
                        'sender' => $sender,
                        'message' => $msgs,
                        'sms_count' => $no_pages,
                        'sched_datetime' => $date,
                        'type' => 'p_group',
                        'status' => 'pending',
                        'created_by' => $user->username,
                        'file_path' => $res['full'],
                        'name' => $name,
                        'total_traffic' => $nummsisdn,
                        'group_ids' => $group_ids
                    ]);

                    //update audit trails
//                    $user->audit_trails()->create([
//                        'username' => $user->username,
//                        'date' => Carbon::now()->toDateTimeString(),
//                        'activity' => $user->username.' sent a personalised group sms to '.$nummsisdn.' msisdn'
//                    ]);

                    $request->session()->flash('success', 'The contacts was successfully uploaded!');
                } else {
                    $request->session()->flash('error_msg', 'Sorry, you don\'t have enough credit to proceed!');
                }

                //reset session
                $step=0;
                $request->session()->forget('group_sms_personalised_data');
                if(!$request->session()->has('success') || empty(session('success')))
                    $request->session()->flash('success', 'Your contacts was successfully uploaded!');
            }
            //in case back button was pressed
            else
            {
                //go back to step 2
                $step=3;
            }
        }

        if($step==1) {
            //fetch user groups
            $groups = $request->user()->groups()->orderBy('name', 'asc')->get(['name', 'id']);
            return view('esme.campaign.send_personalised_group_sms', ['step' => $step, 'groups'=>$groups]);
        }
        else if($step==3)
        {
            return $dataTable->render('esme.campaign.send_personalised_group_sms', ['step'=>$step]);
        } else {
            return view('esme.campaign.send_personalised_group_sms', ['step' => $step]);
        }
    }

    public function edit_campaign($id, TmpGroupSmsDataTable $dataTable, Request $request) {
        $record = Auth::user()->jobs()->findOrFail($id);
        if($record->type == 'bulk') {
            if($request->session()->has('bulk_sms_data')) {
                $request->session()->forget('bulk_sms_data');
            }
            if($request->session()->has('alert')) {
                $request->session()->forget('alert');
            }
            session(['bulk_sms_data'=>[
                'name' => $record->name,
                'sender_id' => $record->sender,
                'schedule_date' => $record->sched_datetime,
                'message_content' => $record->message
            ]]);
            return view('esme.campaign.send_bulk_sms', ['step'=> 1]);
        }
        else if($record->type == 'group') {
            if($request->has('draw')) {
                return $dataTable->render('esme.campaign.send_group_sms', ['step' => 2]);
            }
            if($request->session()->has('group_sms_data')) {
                $request->session()->forget('group_sms_data');
            }
            if($request->session()->has('alert')) {
                $request->session()->forget('alert');
            }
            session(['group_sms_data'=>[
                'name' => $record->name,
                'sender_id' => $record->sender,
                'schedule_date' => $record->sched_datetime,
                'message_content' => $record->message,
                'selected_group' => explode(",", $record->group_ids)
            ]]);
            //fetch user groups
            $groups = Auth::user()->groups()->orderBy('name', 'asc')->get(['name', 'id']);
            return view('esme.campaign.send_group_sms', ['step'=> 1, 'groups'=>$groups]);
        }
        else if($record->type == 'p_bulk') {
            if($request->session()->has('bulk_sms_personalised_data')) {
                $request->session()->forget('bulk_sms_personalised_data');
            }
            if($request->session()->has('alert')) {
                $request->session()->forget('alert');
            }
            session(['bulk_sms_personalised_data'=>[
                'name' => $record->name,
                'sender_id' => $record->sender,
                'schedule_date' => $record->sched_datetime,
                'message_content' => $record->message
            ]]);
            return view('esme.campaign.send_bulk_personalised_sms', ['step'=> 1]);
        }
        else if($record->type == 'p_group') {
            if($request->has('draw')) {
                return $dataTable->render('esme.campaign.send_personalised_group_sms', ['step' => 3]);
            }
            if($request->session()->has('group_sms_personalised_data')) {
                $request->session()->forget('group_sms_personalised_data');
            }
            if($request->session()->has('alert')) {
                $request->session()->forget('alert');
            }
            session(['group_sms_personalised_data'=>[
                'name' => $record->name,
                'sender_id' => $record->sender,
                'schedule_date' => $record->sched_datetime,
                'message_content' => $record->message,
                'selected_group' => explode(",", $record->group_ids)
            ]]);
            //fetch user groups
            $groups = Auth::user()->groups()->orderBy('name', 'asc')->get(['name', 'id']);
            return view('esme.campaign.send_personalised_group_sms', ['step'=> 1, 'groups'=>$groups]);
        }
        return view('esme.campaign.edit', ['record'=>$record]);
    }

    public function delete_campaigns($id) {
        $job = Auth::user()->jobs()->findOrFail($id);
        $job->status = 'deleted';
        $job->save();
        $job->delete();
        Session::flash('success', 'Your campaign has been deleted!');
        return redirect()->back();
    }
}
