<?php

namespace App\Http\Controllers\Admin\LMS;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Slot;
use App\Models\Attendance;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Session;

class AttendanceController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {   
        abort_if(!userCan('attendance.view'), 403);
        return view('admin.LMS.attendance.index');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {   
        $classes = Classes::where('status',1)->get()->toArray();
        abort_if(!userCan('attendance.create'), 403);
        return view('admin.LMS.attendance.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        
        abort_if(!userCan('attendance.create'), 403);
        
        
        $request->validate([
           
            'user_id' => ['required'],
            'date' => ['required'],
        ], [
            'user_id.required' => 'Please select  User Id',
            'date.required' => 'Please Select Date',
          
        ]);

        

        
       
        $activated_status = 0;
        if($request->attend == "on"){
            $activated_status = 1;
        }

        $Attendance = new Attendance();
        $Attendance->user_id = $request->input('user_id');
        $Attendance->date = $request->input('date');
        $Attendance->attend = $activated_status;

        if ($Attendance->save()) {
            session(['message' => "Attendance  Successfully Created", 'toaster_type'=>'toast_success']);
        } else {
            session(['message' => "Try Again Something Wrong", 'toaster_type'=>'toast_info']);
        }
        return redirect()->route('attendance.index');  
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        abort_if(!userCan('attendance.update'), 403);
        $attendance = Attendance::where('id',$id)->first();
        return view('admin.LMS.attendance.edit'  , compact('attendance'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {   
        abort_if(!userCan('attendance.update'), 403); // Check permission

        $request->validate([
            'user_id' => ['required'],
            'date' => ['required'],
        ], [
            'user_id.required' => 'Please select a User Id',
            'date.required' => 'Please select a Date',
        ]);

        $activated_status = $request->has('attend') ? 1 : 0; // Check if 'attend' is 'on'

        $attendance = Attendance::findOrFail($id); // Find attendance record
        $attendance->user_id = $request->input('user_id');
        $attendance->date = $request->input('date');
        $attendance->attend = $activated_status;
        $attendance->save();
        if ($attendance->wasChanged()) {
            session(['message' => "Attendance Successfully Updated", 'toaster_type'=>'toast_success']);
        } else {
            session(['message' => "No changes made to the Attendance", 'toaster_type'=>'toast_info']);
        }

        return redirect()->back(); // Redirect back

    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }

    public function get_data(Request $request){
        if(!isset($request->length)){
            $request->length = 10;
        }

        abort_if(!userCan('attendance.view'), 403);
       

        $query = Attendance::join('users', 'users.id', '=', 'attendances.user_id')->join('candidates', 'candidates.user_id', '=', 'users.id')
        ->select('users.name', 'users.last_name', 'users.id as user_id', 'attendances.id as id', 'attendances.date', 'attendances.attend','candidates.id as candidate_id');
    
    // Count all the attendance records returned by the query
        $all_attendance_list = $query->count();
    
    // Retrieve attendance records, order them by created date in descending order, and paginate the results based on a length parameter from the request
        $attendances = $query->orderBy('attendances.created_at', 'desc')
        ->paginate(@$request->length) // Paginate results based on the request parameter 'length'
        ->withQueryString() // Include current query string in pagination links
        ->toArray();
        
        if(!empty(@$request->Keyword)){
            $any_filter_exist = 1;
        }else{
            $any_filter_exist = 0;
        }
        // dd($attendances);
        $code = view('admin.LMS.attendance.attendance_table', compact('attendances', 'all_attendance_list', 'request'))->render();
       
        $data = [
            'code' => $code,
            'count' => $all_attendance_list,
            'any_filter_exist' => $any_filter_exist,
        ];
        return $data;
    }
}
