<?php /** @noinspection PhpUndefinedClassInspection */

namespace App\Http\Controllers\Admin;

use App\DataTables\EmailPricePerBalanceDataTable;
use App\DataTables\MailPaymentHistoryDataTable;
use App\DataTables\Reseller\FilterDataTable;
use App\DataTables\SmsPricePerBalanceDataTable;
use App\DataTables\SocialPricingDataTable;
use App\EmailPricing;
use App\Filters;
use App\MediaPrice;
use App\SmsPriceRange;
use Exception;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;

class SpricingController extends Controller
{

    public function index(Request $request, SocialPricingDataTable $pricing)
    {

        if ($request->isMethod('post')) {

            $this->validate($request,
                [
                    'business_type' => 'required',
                    'cost' => 'required',
               ]
            );

            $exist = MediaPrice::query()->where('business_type', $request->input('business_type'))->first();
            if (!empty($exist))
                $exist->update($request->all());
            else
                MediaPrice::query()->create($request->all());


            return redirect()->back()->with('success', 'Pricing successfully set for ' . strtoupper($request->input('business_type')));

        }

        return $pricing->render('admin.pricing.index');
    }

    public function create(Request $request)
    {
        if ($request->isMethod('POST')) {

           $data =  $this->validate($request
               , [
                   'cost' => 'required',
                   'name' => 'required',
                   'package_type' => 'required',
                   'is_active' => 'required',
                   'apply_to' => 'required',
                   'no_of_post' => 'required_if:package_type,==,limited',
               ]
           );


                DB::beginTransaction();

                    MediaPrice::query()->create($data);
                    auth()->user()->trail("CREATED SM-SA pricing");

                DB::commit();
                return redirect()->route('admin.social-media.pricing')->with('success', "Pricing successfully added");

        }

        return view('admin.pricing.create');
    }



    public function edit(Request $request,MediaPrice $media)
    {
        if ($request->isMethod('POST')) {

            $data =  $this->validate($request
                , [
                    'cost' => 'required',
                    'no_of_post' => 'required_if:package_type,==,limited|not_in:0',
                    'name' => 'required',
                    'package_type' => 'required',
                    'is_active' => 'required',
                    'apply_to' => 'required',
                ]
            );

            DB::beginTransaction();

                    $media->update($data);
                    auth()->user()->trail("UPDATED SM-SA pricing");

            DB::commit();
            return redirect()->route('admin.social-media.pricing')->with('success', "Pricing successfully updated");

        }

        return view('admin.pricing.edit', compact('media'));
    }


    public function delete(MediaPrice $media)
    {
        DB::beginTransaction();

         auth()->user()->trail('DELETED MEDIA '.$media->id);
         $media->delete();

         DB::commit();

        return redirect()->back()->with('success','PRICE DELETED');
    }


    public function sms_price_index(Request $request, SmsPricePerBalanceDataTable $price)
    {

        if ($request->isMethod('POST')):

            $this->validate($request, [
                'min' => 'required',
                'max' => 'required',
                'unit_price' => 'required',
            ]);

            SmsPriceRange::query()->create($request->all());
            return redirect()->back()->with('success', 'Price Range Successfully Set');

        endif;


        return $price->render('admin.pricing.sms_index');
    }

    public function sms_price_edit(Request $request, $id)
    {
        $var = SmsPriceRange::query()->find($id);

        if ($request->isMethod('post')):

            $this->validate($request, [
                'min' => 'required',
                'max' => 'required',
                'unit_price' => 'required',
            ]);

            $var->update($request->all());

            return redirect()->route('admin.sms.price.setup.index')->with('success', 'Price range successfully updated');


        endif;


        return view('admin.pricing.sms_edit', compact('var'));
    }


    public function email_price_index(Request $request, EmailPricePerBalanceDataTable $email)
    {
        return $email->render('admin.pricing.email_index');
    }

    public function email_price_create(Request $request)
    {

        return $request->isMethod('post') ? $this->email_price_post($request) : view('admin.pricing.email_create');
    }

    public function email_price_edit(Request $request,EmailPricing $package)
    {

        return $request->isMethod('post') ? $this->email_price_update($request,$package) : view('admin.pricing.email_edit',['package'=>$package]);
    }


    public function email_price_post($request)
    {
        $data = $request->validate(
            [
                'package'     => 'required|unique:email_pricing',
                'description' => 'sometimes|nullable|max:500',
                'pricing'     => 'required',
                'no_contacts' => 'required',
                'no_audience' => 'required',
                'is_active'   => 'required',
                'no_emails'   => 'required',
            ]
        );

        DB::beginTransaction();
         EmailPricing::query()->create($data);
         auth()->user()->trail("CREATED Email Pricing {$data['package']}");
        DB::commit();

        return redirect()->route('admin.email.price.setup.index')->with('success', 'Pricing Successfully Created !!');
    }

    public function email_price_update($request,$package)
    {

        $data = $request->validate(
            [
                'package'     => 'required|unique:email_pricing,id,'.$package->id,
                'pricing'     => 'required',
                'no_contacts' => 'required',
                'no_audience' => 'required',
                'is_active'   => 'required',
                'no_emails'   => 'required',
                'description' => 'sometimes|nullable|max:500',
            ]
        );

        DB::beginTransaction();
            $package->update($data);
            \auth()->user()->trail("UPDATED Email Package {$data['package']}");
        DB::commit();

        return redirect()->route('admin.email.price.setup.index')->with('success', 'Pricing Successfully UPDATED !!');
    }

    public function email_price_destroy(EmailPricing $package)
    {
        DB::beginTransaction();
            \auth()->user()->trail("DELETED Email Package {$package->package}");
            $package->delete();
        DB::commit();

        return redirect()->back()->with('success',"Package Successfully Deleted");

    }


    public function email_payment_history(MailPaymentHistoryDataTable $history)
    {
        return $history->render('admin.pricing.history');
    }

}




