<?php

namespace App\Http\Controllers\Admin;

use App\Exports\EventRegistrationExport;
use App\Http\Controllers\Controller;
use App\Http\Requests\FormEventRegistrationDelete;
use App\Models\FormEventRegistration;
use Illuminate\Pagination\Paginator;
use Maatwebsite\Excel\Facades\Excel;

class AdminFormEventRegistration extends Controller
{
    public function getListFormEventRegistration()
    {
        return view('admin.generic.pages.form-event-registration-list');
    }

    public function postListFormEventRegistration()
    {
        $page = request()->input("current");
        $sort = request()->input("sort");
        $search = request()->input("searchPhrase");

        if (!empty($page)) {
            Paginator::currentPageResolver(function () use ($page) {
                return $page;
            });
            if (!empty($search)) {
                $query = FormEventRegistration::where(function ($query) use ($search) {
                    $query->orWhere('full_name', 'like', "%{$search}%")
                        ->orWhere('email', 'like', "%{$search}%")
                        ->orWhere('company_name', 'like', "%{$search}%");
                });
            } else {
                $query = FormEventRegistration::query();
            }

            if (empty($sort)) {
                $rows = $query->paginate(request()->input("rowCount"));
            } else {
                foreach ($sort as $field => $direction) {
                    if (empty($direction) || strtolower($direction) !== "desc") {
                        $order_direction = "asc";
                    }
                    $rows = $query->orderBy($field, strtolower($direction))->paginate(request()->input("rowCount"));
                    break;
                }
            }

            $result = array(
                "total" => $rows->total(),
                "current" => $rows->currentPage(),
                "rowCount" => request()->input("rowCount"),
                "rows" => $rows->getCollection()
            );

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

    public function getView($formId = null)
    {
        if (!empty($formId)) {
            $form = FormEventRegistration::find($formId);
        } else {
            abort(404);
        }

        if(empty($form)){
            abort(404);
        }

        return view('admin.generic.pages.form-event-registration-view', [
            'form'         => $form,
            'canView'      => true
        ]);
    }

    public function getExport()
    {
        return Excel::download(new EventRegistrationExport(), 'event_registrations.xlsx');
    }

    public function postDelete(FormEventRegistrationDelete $request)
    {

        $data = $request->validated();
        $form = FormEventRegistration::find($data['id']);

        if(!empty($form)){
            $form->delete();
        }

        return response()->json(["success" => true]);
    }
}
