<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Fattura;
use App\DataTables\FatturaDataTable;
use App\DataTables\FatturaDataTableEditor;
use Illuminate\Support\Facades\Auth;

class FatturaController extends Controller
{
    
public static $permission_group = "Fatture";
public static $permissions = [
    'view-fattura' => 'Vedi',
    'create-fattura' => 'Crea',
    'edit-fattura' => 'Modifica',
    'delete-fattura' => 'Elimina',
];

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

public function index(FatturaDataTable $dataTable, Request $request)
{
    $dataTable->attivita_id = session()->get('attivita_attuale');

    if($request->has('user_tutteLeMieFatture')){
        $dataTable->query = $dataTable->query->where('user_id', Auth::user()->id);
    }
    return $dataTable->render('fattura.index');
}

public function store(FatturaDataTableEditor $editor)
{
    $request = request();
    $input = $request->all();
    if($request->has('action')){
        switch($input['action']){
            case 'create':
                if(!Auth::user()->can('create-fattura')) return response()->json(['error' => 'Non hai i permessi per creare una fattura'],403);
                break;
            case 'edit':
                if(!Auth::user()->can('edit-fattura')) return response()->json(['error' => 'Non hai i permessi per modificare una fattura'],403);
                break;
            case 'remove':
                if(!Auth::user()->can('delete-fattura')) return response()->json(['error' => 'Non hai i permessi per eliminare una fattura'],403);
                break;
        }
    }
    return $editor->process($request);
}

public function show(Request $request)
{
    if(!Auth::user()->hasAnyRole(['superadmin','amministratore'])) return response()->json(['error' => 'Non hai i permessi per vedere una fattura'],403);

    $fattura = Fattura::findOrFail($request->fattura_id);
    return view('fattura.show', compact('fattura'));
}

public function need_fatturazione_mensile()
{
    $generaFatturaMensile = app('App\Services\Fattura\GeneraFatturaMensile')->needFatturazione();
    return response()->json(['success' => 'Fattura mensile generata']);
}

public function registra_pagamento(Request $request)
{
    $fattura = Fattura::findOrFail($request->fattura_id);
    $fattura->stato = Fattura::PAGATA;
    $fattura->info= json_encode(['pagamento_registrato_il' => now()]);
    $fattura->save();
    return response()->json(['success' => 'Pagamento registrato']);
}
}
