<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\PrimaNota;
use App\Models\Categoriacontabile;
use App\DataTables\PrimaNotaDataTable;
use App\DataTables\PrimaNotaDataTableEditor;
use Illuminate\Support\Facades\Auth;
use Illuminate\Routing\Controllers\Middleware;

class PrimaNotaController extends Controller
{ 
    public static $permission_group = "Prima Nota";
    public static $permissions = [
        'view-primanota' => 'Vedi',
        'create-primanota' => 'Crea',
        'edit-primanota' => 'Modifica',
        'delete-primanota' => 'Elimina',
    ];

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

    public function index(PrimaNotaDataTable $dataTable)
    {
        $attivitaId = session()->get('attivita_attuale');
        $dataTable->attivita_id = $attivitaId;

        $statistiche = $attivitaId
            ? PrimaNota::statisticheFiltrate($attivitaId)
            : [
                'totale_operazioni' => 0,
                'importo_entrate' => 0,
                'importo_uscite' => 0,
                'saldo' => 0,
            ];

        $categorie = Categoriacontabile::where('attivita_id', $attivitaId)
            ->where('is_attiva', true)
            ->orderBy('nome')
            ->get();

        return $dataTable->render('prima_nota.index', compact('statistiche', 'categorie'));
    }

    public function statistiche(Request $request)
    {
        $attivitaId = session()->get('attivita_attuale');

        if (!$attivitaId) {
            return response()->json([
                'totale_operazioni' => 0,
                'importo_entrate' => 0,
                'importo_uscite' => 0,
                'saldo' => 0,
            ]);
        }

        return response()->json(
            PrimaNota::statisticheFiltrate(
                $attivitaId,
                $request->only(['data_inizio', 'data_fine', 'categoria_contabile_id', 'tipo_movimento'])
            )
        );
    }

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

    public function show(Request $request)
    {
        $primanota = PrimaNota::find($request->get('primanota_id'));
        return view('prima_nota.show', compact('primanota'));
    }
}
