<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Prenotazione;
use App\Models\PrenotazioneRisposta;
use App\DataTables\PrenotazioneDataTable;
use App\DataTables\PrenotazioneDataTableEditor;
use Illuminate\Support\Facades\Auth;
use App\Models\Evento;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;


class PrenotazioneController extends Controller
{
    public static $permission_group = "Prenotazioni";
    public static $permissions = [
        'view-prenotazione' => 'Vedi',
        'create-prenotazione' => 'Crea',
        'edit-prenotazione' => 'Modifica',
        'delete-prenotazione' => 'Elimina',
        'report-prenotazione' => 'Report',
    ];

    public static function middleware(): array
    {
        return [
            new Middleware('permission:view-prenotazione', only: ['index']),
            new Middleware('permission:create-prenotazione|edit-prenotazione|delete-prenotazione', only: ['store', 'update', 'destroy']),
        ];
    }

    public function index(PrenotazioneDataTable $dataTable)
    {
        return $dataTable->render('prenotazione.index');
    }

    public function store(PrenotazioneDataTableEditor $editor)
    {
        $request = request();
        $input = $request->all();
        if($request->has('action')){
          switch($input['action']){
            case 'create':
              if(!Auth::user()->can('create-prenotazione')) return;
              break;
            case 'edit':
              if(!Auth::user()->can('edit-prenotazione')) return;
              break;
            case 'remove':
              if(!Auth::user()->can('delete-prenotazione')) return;
              break;
          }
        }
        return $editor->process($request);
    }

    public function index_evento(PrenotazioneDataTable $dataTable)
    {
        $dataTable->evento_id = request()->get('evento_id');
        return $dataTable->render('prenotazione.index', ['evento' => Evento::find($dataTable->evento_id)]);
    }

    public function show(Request $request)
    {
        $prenotazione = Prenotazione::find($request->get('prenotazione_id'));
        return view('prenotazione._partials.modal', ['prenotazione' => $prenotazione]);
    }

    public function prenota_form(Request $request){
        $evento = Evento::find($request->evento_id);
        if(!$evento){
            return response()->json(['success' => false , 'messagge' => 'Evento non trovato']);
        }
        return view('prenotazione.cliente.prenota')->with(['evento' => $evento]);
    }

    public function prenota(Request $request){

$evento = Evento::find($request->evento_id);

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

$validator = Validator::make($request->all(), [
    'nome' => 'required',
    'cognome' => 'required',
    'email' => 'required|email',
    'telefono' => 'required',
    'evento_id' => 'nullable|exists:evento,id',
    'cucina_id' => 'nullable|exists:cucina,id',
    'note' => 'nullable',
    'codice' => 'nullable|unique:prenotazione,codice',
    'stato_pagamento' => 'nullable',
    'metodo_pagamento' => 'nullable',
    'stato' => 'nullable|string',
]);

if($validator->fails()){
    return response()->json(['success' => false , 'messagge' => $validator->errors()->first()]);
}


$prenotazione = new Prenotazione();
$prenotazione->fill($request->all());
$prenotazione->stato = Prenotazione::STATO_INVIATA;
$prenotazione->codice = strtoupper(Str::random(5));
$prenotazione->save();

// Recupera tutti i campi che iniziano con 'prenotazione_risposta_'
foreach ($request->all() as $key => $value) {
    if (strpos($key, 'prenotazione_risposta_') === 0) {
        $formId = str_replace('prenotazione_risposta_', '', $key);

        PrenotazioneRisposta::create([
            'prenotazione_id' => $prenotazione->id,
            'evento_form_id' => $formId,
            'risposta' => $value,
        ]);
    }
}

// dd($prenotazione->risposte);
if(!$evento){
    return response()->json(['success' => false , 'messagge' => 'Evento non trovato']);
}
        return view('consulta.prenotazione.show')->with(['prenotazione' => $prenotazione]);
        // return response()->json(['success' => true , 'message' => 'prenota']);
    }




    public function report_index(Request $request)
    {
        return view('prenotazione.report.index');
    }

}
