<?php

namespace App\Http\Controllers;

use App\Models\Horario;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class HorarioController extends Controller
{

    public function __construct() {
        $this->middleware('can:horario.index')->only('index','show');
        $this->middleware('can:horario.create')->only('create','store');
        $this->middleware('can:horario.edit')->only('edit','update');
        $this->middleware('can:horario.destroy')->only('destroy');
    }

    public function index()
    {
        $usuarios = User::with(['roles'])->has('horarios')->get();

        return view('horario.index',compact('usuarios'));
    }

    public function create()
    {
        $usuarios = User::with(['roles'])
        ->where('code', '!=', '0')
        ->doesntHave('horarios')
        ->get();;

        $inicioSemana = Carbon::now()->startOfWeek();

        $dias = [];
        for ($i = 0; $i < 7; $i++) {
            // Clonamos la fecha de inicio y sumamos los días necesarios
            $dias[] = $inicioSemana->copy()->addDays($i);
        }

        return view('horario.create',compact('usuarios','dias'));
    }

    public function store(Request $request)
    {

        foreach($request->horarios as $h){

            $horario = Horario::create([
                'user_id'=>$request->user_id,
                'dia'=>$h['dia'],
                'entrada'=>$h['entrada'],
                'comidas'=>$h['comida_salida'],
                'comidar'=>$h['comida_regreso'],
                'salida'=>$h['salida'],
                'status'=>$h['activo'] ?? 0,
            ]);
        }

        return redirect()->route('horario.edit',$request->user_id)->with('info','El horario se creo correctamente');
    }

    public function edit(User $user)
    {
        $user->load('horarios');

        $usuarios = User::where('code','!=','0')->get();

        // Generar semana actual
        $inicioSemana = Carbon::now()->startOfWeek();

        $dias = [];
        for ($i = 0; $i < 7; $i++) {
            $dias[] = $inicioSemana->copy()->addDays($i);
        }

        // Normalizar dias en minusculas
        $horarios = $user->horarios->keyBy(function($item){
            return strtolower($item->dia);
        });

        return view('horario.edit', compact('user','usuarios','dias','horarios'));
    }

    public function update(Request $request, User $user)
    {
        foreach ($request->horarios as $h) {

            Horario::updateOrCreate(
                [
                    'user_id' => $user->id,
                    'dia'     => strtolower($h['dia']),
                ],
                [
                    'entrada'  => $h['entrada'] ?? null,
                    'comidas'  => $h['comida_salida'] ?? null,
                    'comidar'  => $h['comida_regreso'] ?? null,
                    'salida'   => $h['salida'] ?? null,
                    'status'   => $h['activo'] ?? 0,
                ]
            );
        }

        return redirect()
            ->route('horario.edit', $user->id)
            ->with('info','Horario actualizado correctamente');
    }

    public function show(Horario $horario)
    {

        return view('horario.show',compact('areacode'));
    }

    public function destroy(User $user)
    {
        $user->horarios()->delete();
        session()->flash('swal',[
            'icon'=>'success',
            'title'=>'Eliminado!',
            'text'=>'Se han eliminado los registros correctamente'
        ]);
        return redirect()->route('horario.index');
    }

}
