<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Attivita;
use App\DataTables\AttivitaDataTable;
use App\DataTables\AttivitaDataTableEditor;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;


class AttivitaController extends Controller
{
    public static $permission_group = "Attività";
    public static $permissions = [
        'view-attivita' => 'Vedi',
        'create-attivita' => 'Crea',
        'edit-attivita' => 'Modifica',
        'delete-attivita' => 'Elimina',
        'select-attivita' => 'Seleziona',
    ];

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

    public function index(AttivitaDataTable $dataTable)
    {
        $dataTable->user_id = Auth::user()->id;
        return $dataTable->render('attivita.index');
    }

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

    public function show($attivita_id)
    {
        $attivita = Attivita::with([
            'dispositivi',
            'eventi',
            'prenotazioni',
            'piatti',
            'fornitori',
        ])->find($attivita_id);

        return view('attivita.show', ['attivita' => $attivita]);
    }

    public function select(Request $request)
    {
        $request->validate([
            'attivita_id' => 'required|exists:attivita,id',
        ]);
        Session::put('attivita_attuale', $request->attivita_id);
        return redirect()->route('dashboard')->with('success', 'Attività selezionata con successo');
    }

    public function list_api()
    {
        $attivita = Attivita::where('is_attiva', true)->where('user_id', Auth::user()->id)->get();
        return response()->json([
            'message' => 'Attività listate con successo',
            'status' => 'success',
            'success' => true,
            'attivita' => $attivita
        ]);
    }

    public function show_public(Request $request)
    {
        $attivita = Attivita::find($request->attivita_id);
        if(!$attivita) {
            return redirect()->route('welcome')->with('error', 'Attività non trovata');
        }
        return view('attivita.public.show', ['attivita' => $attivita]);
    }
}
