<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Admin\BaseController as BaseController;
use Illuminate\Http\Request;
use Illuminate\Database\QueryException;

use App\Lib\Admin\App;

use App\Models\OfficeStaff;
use Illuminate\Support\Facades\Validator;

class OfficeStaffController extends BaseController
{
    public $className;

    public function __construct(){
        $classNameArr = explode('\\', __CLASS__);
        $this->className = end($classNameArr);
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $dataListModel = OfficeStaff::orderBy('id', 'DESC')->get();

        $coreObj = new App();
        $listDataAtrArr = $coreObj->getListDataAtr();

        $roleRights = ['add' => App::hasAccessToMethod($this->className, 'admin.office-staff.create'), 'edit' => App::hasAccessToMethod($this->className, 'admin.office-staff.edit'), 'delete' => App::hasAccessToMethod($this->className, 'admin.office-staff.delete')];
        
        return view('themes.backend.pages.officestaff.index', compact('dataListModel', 'listDataAtrArr', 'roleRights'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {        
        return view('themes.backend.pages.officestaff.createform');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $loginAdminId = self::getLoggedInAdminId();

        $commonconstants = Config('commonconstants');

        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'address' => 'required',
            'contact_number' => 'required',
            'sin' => 'required',
            'joining_date' => 'required',
            'email' => 'required|email|unique:office_staffs',
            'residental_status' => 'required',
        ], [
            
        ]);

        if ($validator->fails()) {
            return back()->withErrors($validator)->withInput();
        }
        // dd($request->all());

        try {
            $input = $request->except('_token', 'submit'); 

            $store = new OfficeStaff($input);

            $store->created_by = $commonconstants['cu_by_val'][1];
            $store->created_id = $loginAdminId;
            $store->updated_by = $commonconstants['cu_by_val'][1];
            $store->updated_id = $loginAdminId;
            $store->save();

        } catch (QueryException $exception) {
            if($loginAdminId == Config('commonconstants.def_super_admin_id')){
                return back()->with('alert', Config('adminconstants.alert_css.2'))->with('message', $exception->getMessage())->with('title', __('admin.error_ttl'))->withInput();
            }
            else{
                return back()->with('alert', Config('adminconstants.alert_css.2'))->with('message', __('message.error.data_saved'))->with('title', __('admin.error_ttl'));
            }
        }

        return back()->with('alert', Config('adminconstants.alert_css.1'))->with('message', __('message.success.add'))->with('title', __('admin.success_ttl'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $dataArr = OfficeStaff::find($id);

        $editDataAtrArr = ["title"=>__('office-staff.edit_txt'), "route"=>'office-staff.edit'];
        
        return view('themes.backend.pages.officestaff.updateform', compact('dataArr', 'editDataAtrArr'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $loginAdminId = self::getLoggedInAdminId();

        $commonconstants = Config('commonconstants');

        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'address' => 'required',
            'contact_number' => 'required',
            'sin' => 'required',
            'joining_date' => 'required',
            'email' => 'required|email|unique:office_staffs,email,' . $id . ',id',
            'residental_status' => 'required',
        ], [
        ]);

        if ($validator->fails()) {
            return back()->withErrors($validator)->withInput();
        }

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

        try {
            $input = $request->except('_method', '_token', 'submit', 'files'); 

            $store = OfficeStaff::find($id);

            foreach ($input as $key => $value) 
            {
                $store->$key = trim($value);
            }
            $store->updated_by = $commonconstants['cu_by_val'][1];
            $store->updated_id = $loginAdminId;
            $store->save();
        } catch (QueryException $exception) {
            if($loginAdminId == Config('commonconstants.def_super_admin_id')){
                return back()->with('alert', Config('adminconstants.alert_css.2'))->with('message', $exception->getMessage())->with('title', __('admin.error_ttl'))->withInput();
            }
            else{
                return back()->with('alert', Config('adminconstants.alert_css.2'))->with('message', __('message.error.update'))->with('title', __('admin.error_ttl'));
            }
        }

        return back()->with('alert', Config('adminconstants.alert_css.1'))->with('message', __('message.success.update'))->with('title', __('admin.success_ttl'));
    }

    public function deleteData(Request $request)
    {
        $loginAdminId = self::getLoggedInAdminId();
        try {   
            $checkboxArr = $request->get('checkbox');
            if($request->ajax()){
                OfficeStaff::destroy($checkboxArr);
            }else{
                if(count($checkboxArr)>0)
                {
                    OfficeStaff::destroy($checkboxArr);
                }
            }
        } catch (QueryException $exception) {
            if($request->ajax()){
                return response()->json(['result' => false,'redirect_url' => '','message' =>  __('message.error.delete') ]);
            }else{
                if($loginAdminId == Config('commonconstants.def_super_admin_id')){
                    return back()->with('alert', Config('adminconstants.alert_css.2'))->with('message', $exception->getMessage())->with('title', __('admin.error_ttl'))->withInput();
                }
                else{
                    return back()->with('alert', Config('adminconstants.alert_css.2'))->with('message', __('message.error.delete'))->with('title', __('admin.error_ttl'));
                }
            }
        }
        
        if($request->ajax()){
            return response()->json(['result' => true,'redirect_url' => '','message' =>  __('message.success.delete')]);
        }else{
            return back()->with('alert', Config('adminconstants.alert_css.1'))->with('message', __('message.success.delete'))->with('title', __('admin.success_ttl'));
        }
    }
}
