<?php

namespace App\Http\Controllers\Admin;

use App\Careers;
use App\Departments;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Illuminate\Http\Request;

class JobsController extends Controller{

    private $request;

    public function __construct(Request $request){
        $this->request = $request;
    }

    public function getJobs(){
        $positions = Departments::with('user')->get();
        $careers = Careers::with('user')->get();
        return view('admin.jobs.index', ['positions' => $positions, 'jobs' => $careers]);
    }

    public function createDepartment(){

        if($this->request->has('edit_id') && $this->request->get('edit_id')){
            $position = Departments::where('department', $this->request->get('department'))->first(['id']);
            if(!isset($position->id) || (isset($position->id) && $position->id == $this->request->get('edit_id'))) {
                $position = Departments::where('id', $this->request->get('edit_id'))->update(['department' => $this->request->get('department')]);
                if(!$position)
                    return response()->json(['status' => 'FAIL', 'message' => 'Can\'t update the department'], 200);
                return response()->json(['status' => 'OK', 'message' => 'Department updated successfully'], 200);
            }
            $message = 'Duplicate department name, please enter different name';
        }else {
            $position = Departments::where('department', $this->request->get('department'))->first(['id']);
            $message = 'Duplicate department name, please enter different name';
            if (!isset($position->id)) {
                $position = (new Departments())->fill($this->request->input());
                $position->created_at = Carbon::now()->toDateTimeString();
                $position->save();
                $message = 'Failed create department';
                if ($position) {
                    $position = Departments::with('user')->where('id', $position->id)->first();
                    $table = '<tr><td class="dep_'.$position->id.'">' . $position->department . '</td><td>' . $position->user->name . '</td><td>' . $position->created_at . '</td><td><span style="margin-right: 20px;"><i data-id="'.$position->id.'" class="delete-dep fa fa-trash"></i></span><span><i data-id="'.$position->id.'" data-dep="'.$position->department.'" class="edit-dep fa fa-edit"></i></span></td></tr>';
                    return response()->json(['status' => 'OK', 'data' => $table], 200);
                }
            }
        }
        return response()->json(['status' => 'FAIL', 'message' => $message], 200);
    }

    public function deleteDepartment(){
        if($this->request->get('id')){
                        Departments::where('id', $this->request->get('id'))->update(['deleted_by' => $this->request->get('user_id')]);
            $position = Departments::where('id', $this->request->get('id'))->delete();
            if($position){
                return response()->json(['status' => 'OK'], 200);
            }
        }

        return response()->json(['status' => 'FAIL', 'message' => 'Can\'t delete the department'], 200);
    }

    public function createJob(){
        if($this->request->get('job_id')){
            $careers = Careers::find($this->request->get('job_id'));
            $message = 'Job '.$this->request->get('title').' updated successfully';
            $careers->updated_by = $this->request->get('user_id');
        }else{
            $careers = new Careers();
            $message = 'Job '.$this->request->get('title').' created successfully';
            $careers->created_at = Carbon::now()->toDateTimeString();
        }
        $careers->fill($this->request->input());
        $careers->title = str_replace('\'', '&#39;', $this->request->get('title'));
        $careers->requirement = str_replace('\'', '&#39;', $this->request->get('job_desc'));
        $careers->expectation = str_replace('\'', '&#39;', $this->request->get('roles_responsibiltes'));
        $careers->description = str_replace('\'', '&#39;', $this->request->get('req_skills'));
        $careers->location = str_replace('\'', '&#39;', $this->request->get('location'));
        $careers->save();
        if (isset($careers->id)){
            \Session::flash('success', $message);
            return redirect()->back();
        }

        \Session::flash('error', 'Can\'t create job');
        return redirect()->back();
    }

    public function changeJobStatus(){
        if($this->request->get('user_id') && $this->request->get('job_id')){
            $career = Careers::find($this->request->get('job_id'));
            $career->status = $this->request->get('status');
            $career->save();

            if($career){
                return response()->json(['status' => 'OK', 'message' => 'Status changed successfully'], 200);
            }
        }

        return response()->json(['status' => 'FAIL', 'message' => 'Can\'t change the status'], 200);
    }

    public function deleteJob(){
        if($this->request->get('user_id') && $this->request->get('job_id')){
            Careers::where('id', $this->request->get('job_id'))->update(['deleted_by' => $this->request->get('user_id')]);
            $career = Careers::where('id', $this->request->get('job_id'))->delete();

            if($career){
                return response()->json(['status' => 'OK', 'message' => 'Job deleted successfully'], 200);
            }
        }

        return response()->json(['status' => 'FAIL', 'message' => 'Can\'t delete the job'], 200);
    }
}
