<?php

namespace App\Http\Controllers;

use App\Models\Attivita;
use Illuminate\Http\Request;
use App\Models\Impostazioni;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use App\DataTables\ImpostazioniDataTable;
use App\DataTables\ImpostazioniDataTableEditor;

class ImpostazioniController extends Controller
{
    public static $permission_group = "Impostazioni";
    public static $permissions = [
        'view-impostazioni' => 'Vedi',
        'create-impostazioni' => 'Crea',
        'edit-impostazioni' => 'Modifica',
        'delete-impostazioni' => 'Elimina',
    ];
    
    public static function middleware(): array
    {
        return [
            new Middleware('permission:view-impostazioni', only: ['index']),
            new Middleware('permission:create-impostazioni|edit-impostazioni|delete-impostazioni', only: ['store']),
        ];
    }
    
    public function index(ImpostazioniDataTable $dataTable)
    {
        $attivita = Attivita::find(Session::get('attivita_attuale'));
        if(!$attivita) return redirect()->route('attivita.index')->with('error', 'Attività non trovata');

        if(Auth::user()->id != $attivita->user_id){
            if(!Auth::user()->hasRole('superadmin')){
                return redirect()->route('attivita.index')->with('error', 'Non hai accesso a questa attività');
            }
        }

        $gruppoImpostazioni = Impostazioni::where('attivita_id', $attivita->id)
        ->get()->groupBy('gruppo');
        $dataTable->attivita_id = Session::get('attivita_attuale');
        return $dataTable->render('impostazioni.index', compact('gruppoImpostazioni'));
    }

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

    public function edit($impostazione_id)
    {
        $impostazione = Impostazioni::find($impostazione_id);
        if(!$impostazione) return redirect()->route('impostazioni.index')->with('error', 'Impostazione non trovata');
        return view('impostazioni.edit', compact('impostazione'));
    }
}
