<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Dispositivo;
use App\DataTables\PuntoOperatoreDataTable;
use App\DataTables\PuntoOperatoreDataTableEditor;
use Illuminate\Support\Facades\Auth;

class PuntoOperatoreController extends Controller
{
    public static $permission_group = "Punto Operatore";
    public static $permissions = [
        'view-punto_operatore' => 'Vedi',
        'create-punto_operatore' => 'Crea',
        'edit-punto_operatore' => 'Modifica',
        'delete-punto_operatore' => 'Elimina',
    ];
    
    
    public static function middleware(): array
    {
        return [
            new Middleware('permission:view-punto_operatore', only: ['index']),
            new Middleware('permission:edit-punto_operatore', only: ['toggle_is_attivo']),
            new Middleware('permission:create-punto_operatore|edit-punto_operatore|delete-punto_operatore', only: ['store', 'update', 'destroy']),
        ];
    }
    
    
    public function index(PuntoOperatoreDataTable $dataTable)
    {
        $attivita_attuale = session('attivita_attuale');
        if(!$attivita_attuale){
            return redirect()->route('attivita.index')
            ->with('error', 'Attività non trovata');
        }
        $dataTable->attivita_id = $attivita_attuale;
        return $dataTable->render('punto_operatore.index');
    }
    
    
    public function store(PuntoOperatoreDataTableEditor $editor)
    {
        $request = request();
        $input = $request->all();
        if($request->has('action')){
            switch($input['action']){
                case 'create':
                    if(!Auth::user()->can('create-punto_operatore')) return;
                    break;
                case 'edit':
                    if(!Auth::user()->can('edit-punto_operatore')) return;
                    break;
                case 'delete':
                    if(!Auth::user()->can('delete-punto_operatore')) return;
                    break;
            }
        }
        return $editor->process($request);
    }

    public function toggle_is_attivo(Request $request)
    {
        $dispositivo = Dispositivo::find($request->get('punto_operatore_id'));
        if(!$dispositivo){
            return redirect()->back()->with('error', 'Punto operatore non trovato');
        }

        $dispositivo->is_attivo = !$dispositivo->is_attivo;
        $dispositivo->save();
        return response()->json(['success' => true, 'message' => 'Punto operatore ' . ($dispositivo->is_attivo ? 'attivato' : 'disattivato')]);
    }

    public function show(Request $request)
    {
        $dispositivo = Dispositivo::find($request->get('dispositivo_id'));
        if(!$dispositivo){
            return redirect()->back()->with('error', 'Punto operatore non trovato');
        }
        return view('punto_operatore.show', ['dispositivo' => $dispositivo]);
    }
}
