<?php
use Illuminate\Support\Facades\Route;

use App\Http\Controllers\HomePageController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\RoleController;
use App\Http\Controllers\FornitoreController;
use App\Http\Controllers\StampanteController;
use App\Http\Controllers\BachecaController;
use App\Http\Controllers\PuntoVenditaController;
use App\Http\Controllers\PrimaNotaController;
use App\Http\Controllers\PagamentoController;
use App\Http\Controllers\BilancioController;
use App\Http\Controllers\CategoriaController;
use App\Http\Controllers\PiattoController;
use App\Http\Controllers\AllergeneController;
use App\Http\Controllers\CucinaController;
use App\Http\Controllers\EventoController;
use App\Http\Controllers\PrenotazioneController;
use App\Http\Controllers\AttivitaController;
use App\Http\Controllers\DispositivoController;
use App\Http\Controllers\MonitorController;
use App\Http\Controllers\OrdineController;
use App\Http\Controllers\MappaDispositiviController;
use App\Http\Controllers\CarrelloController;
use App\Http\Controllers\RigaOrdineController;
use App\Http\Controllers\MetodoPagamentoController;
use App\Http\Middleware\AttivitaMiddleware;
use App\Http\Controllers\ContenutoBachecaController;
use App\Http\Controllers\BachecaHasContenutoController;
use App\Http\Controllers\PrintJobController;
use App\Http\Controllers\EndpointController;
use App\Http\Controllers\ConsultaController;
use App\Http\Controllers\TestiController;
use App\Http\Controllers\EventoFormController;
use App\Http\Controllers\OpzioneFormController;
use App\Http\Controllers\PuntoOperatoreController;
use App\Http\Controllers\ReportController;
use App\Http\Controllers\SaltacodaController;
use App\Http\Controllers\CategoriaContabileController;
use App\Http\Controllers\RigaOrdineNotificaController;
use App\Http\Controllers\OperatoreController;
use App\Http\Controllers\TombolaController;
use App\Http\Controllers\ChiusuraServizioController;
use App\Http\Controllers\ImpostazioniController;
use App\Http\Controllers\VariantePiattoController;  
use App\Http\Controllers\TavoloController;

Route::get('/', [HomePageController::class, 'welcome'])->name('welcome');

Route::middleware(['auth:sanctum', config('jetstream.auth_session')])->prefix('admin')->group(function () {
// Attività
Route::resource('attivita', AttivitaController::class, ['only' => ['index', 'store']]);
Route::get('attivita/show/{attivita_id}', [AttivitaController::class, 'show'])->name('attivita.show');
Route::post('attivita/select', [AttivitaController::class, 'select'])->name('attivita.select');
});

Route::middleware(['auth:sanctum', AttivitaMiddleware::class, config('jetstream.auth_session')])->prefix('admin')->group(function () {

  Route::resource('user', UserController::class, ['only' => ['index', 'store']]);
  Route::get('user/{user_id}/edit_profilo', [UserController::class, 'edit_profilo'])->name('user.edit_profilo');
  Route::post('user/updateProfile', [UserController::class, 'updateProfile'])->name('user.updateProfile');
  Route::get('user/create', [UserController::class, 'create'])->name('user.create');
  // Route::post('user/store', [UserController::class, 'storeUser'])->name('user.store');
  Route::post('user/upload_foto_profilo', [UserController::class, 'upload_foto_profilo'])->name('user.upload_foto_profilo');
  Route::get('user/showCropImage', [UserController::class, 'showCropImage'])->name('user.showCropImage');
  Route::post('user/cropImage', [UserController::class, 'cropImage'])->name('user.cropImage');
  
  // Ruoli e permessi
  Route::get('role', [RoleController::class, 'index'])->name('role.index');
  Route::get('role/showEdit', [RoleController::class, 'showEdit'])->name('role.showEdit');
  Route::get('role/showNew', [RoleController::class, 'showNew'])->name('role.showNew');
  Route::post('role/updatePermission', [RoleController::class, 'updatePermission'])->name('role.updatePermission');
  Route::post('role/createRole', [RoleController::class, 'createRole'])->name('role.createRole');
  Route::get('ruoli/permessi', [RoleController::class, 'getPermissions'])->name('role.getPermissions');


  // Impostazioni
  Route::resource('impostazioni', ImpostazioniController::class, ['only' => ['index', 'store']]);
  
  // Operatore
  Route::resource('operatore', OperatoreController::class, ['only' => ['index', 'store']]);
  Route::get('operatore/show', [OperatoreController::class, 'show'])->name('operatore.show');
  Route::post('operatore/update.password', [OperatoreController::class, 'update_password'])->name('operatore.update.password');
  Route::post('operatore/update.dispositivi', [OperatoreController::class, 'update_dispositivi'])->name('operatore.update.dispositivi');
  Route::get('operatore/dispositivi.list', [OperatoreController::class, 'dispositivi_list'])->name('operatore.dispositivi.list');
  
  // Cucina
  Route::resource('cucina', CucinaController::class, ['only' => ['index', 'store']]);
  Route::get('cucina/dashboard', [CucinaController::class, 'dashboard'])->name('cucina.dashboard');
  
  // Piatto
  Route::resource('piatto', PiattoController::class, ['only' => ['index', 'store']]);
  Route::get('piatto/datatable', [PiattoController::class, 'datatable'])->name('piatto.datatable');
  
  // Variante Piatto
  Route::resource('variante-piatto', VariantePiattoController::class, ['only' => ['index', 'store']])->names(['index' => 'variante-piatto.index', 'store' => 'variante-piatto.store']);
  Route::get('variante-piatto/datatable', [VariantePiattoController::class, 'datatable'])->name('variante-piatto.datatable');
  Route::get('variante-piatto/list', [VariantePiattoController::class, 'list'])->name('variante-piatto.list');
  
  // Allergene
  Route::resource('allergene', AllergeneController::class, ['only' => ['index', 'store']]);

  // Evento
  Route::resource('evento', EventoController::class, ['only' => ['index', 'store']]);
  Route::get('evento/gallery/edit', [EventoController::class, 'gallery_edit'])->name('evento.gallery.edit');
  Route::post('evento/gallery/upload', [EventoController::class, 'gallery_upload'])->name('evento.gallery.upload');
  Route::get('evento/edit', [EventoController::class, 'edit'])->name('evento.edit');

  // Evento Form
  Route::resource('form-evento', EventoFormController::class, ['only' => ['index', 'store']])->names('form-evento');
  // Route::post('evento-form/richiesta/store', [EventoFormController::class, 'store'])->name('evento.form.richiesta.store');
  
  // Opzione Form
  Route::resource('opzione-form', OpzioneFormController::class, ['only' => ['index', 'store']])->names('opzione-form');


  // Prenotazione
  Route::resource('prenotazione', PrenotazioneController::class, ['only' => ['index', 'store']]);
  Route::get('prenotazione/index/evento', [PrenotazioneController::class, 'index_evento'])->name('prenotazione.index.evento');
  Route::get('prenotazione/show', [PrenotazioneController::class, 'show'])->name('prenotazione.show');
  Route::get('prenotazione/report/index', [PrenotazioneController::class, 'report_index'])->name('prenotazione.report.index');
  
  // Fornitore
  Route::resource('fornitore', FornitoreController::class, ['only' => ['index', 'store']]);
  Route::get('fornitore/show', [FornitoreController::class, 'show'])->name('fornitore.show');
  Route::get('fornitore/show_modal', [FornitoreController::class, 'show_modal'])->name('fornitore.show_modal');
  
  // Categoria Contabile
  Route::resource('categoria-contabile', CategoriaContabileController::class, ['only' => ['index', 'store']]);
  
  // Stampante
  Route::resource('stampante', StampanteController::class, ['only' => ['index', 'store']]);

  // Bacheca
  Route::resource('bacheca', BachecaController::class, ['only' => ['index', 'store']]);
  Route::get('bacheca/show', [BachecaController::class, 'show'])->name('bacheca.show');

  // Contenuto Bacheca
  Route::resource('contenuto-bacheca', ContenutoBachecaController::class, ['only' => ['index', 'store']]);
  Route::get('contenuto-bacheca/associa-contenuto', [BachecaHasContenutoController::class, 'associa_contenuto'])->name('bacheca.associa-contenuto');
  Route::post('contenuto-bacheca/associa-contenuto-bacheca', [BachecaHasContenutoController::class, 'associa_contenuto_bacheca'])->name('bacheca.associa-contenuto-bacheca');

  // Punto Vendita
  Route::resource('punto-vendita', PuntoVenditaController::class, ['only' => ['index', 'store']]);
  Route::get('punto-vendita/dettagli-punto-vendita', [PuntoVenditaController::class, 'dettagli_punto_vendita'])->name('punto-vendita.dettagli-punto-vendita');
  Route::get('punto-vendita/show', [PuntoVenditaController::class, 'show'])->name('punto-vendita.show');
  Route::get('punto-vendita/edit', [PuntoVenditaController::class, 'edit'])->name('punto-vendita.edit');
  Route::post('punto-vendita/update', [PuntoVenditaController::class, 'update'])->name('punto-vendita.update');
  Route::post('punto-vendita/associa-cucina', [PuntoVenditaController::class, 'associa_cucina'])->name('punto-vendita.associa-cucina');
  Route::post('punto-vendita/dissocia-dispositivo' , [PuntoVenditaController::class , 'dissocia_dispositivo'])->name('punto-vendita.dissocia-dispositivo');

  Route::post('punto-vendita/kiosk/crea-ordine', [PuntoVenditaController::class, 'crea_ordine'])->name('punto-vendita.kiosk.crea-ordine');
  Route::get('punto-vendita/kiosk/riepilogo', [PuntoVenditaController::class, 'riepilogo'])->name('punto-vendita.kiosk.riepilogo');
  Route::get('punto-vendita/dettagli', [PuntoVenditaController::class, 'dettagli'])->name('punto-vendita.dettagli');
  Route::get('punto-vendita/riepilogo-cassa', [PuntoVenditaController::class, 'riepilogo_cassa'])->name('punto-vendita.riepilogo-cassa');
  Route::get('punto-vendita/cerca-pre-ordine', [PuntoVenditaController::class, 'cerca_pre_ordine'])->name('punto-vendita.cassa.cerca-pre-ordine');
  Route::post('punto-vendita/importa-pre-ordine', [PuntoVenditaController::class, 'importa_pre_ordine'])->name('punto-vendita.cassa.importa-pre-ordine');


  // Chiusura Servizio
  Route::resource('chiusura-servizio', ChiusuraServizioController::class, ['only' => ['index', 'store']]);
  Route::get('chiusura-servizio/show', [ChiusuraServizioController::class, 'show'])->name('chiusura-servizio.show');
  Route::post('chiusura-servizio/chiudi-servizio', [ChiusuraServizioController::class, 'chiudi_servizio'])->name('chiusura-servizio.chiudi-servizio');

  // Punto Operatore
  Route::resource('punto-operatore', PuntoOperatoreController::class, ['only' => ['index', 'store']]);
  Route::get('punto-operatore/toggle-is-attivo', [PuntoOperatoreController::class, 'toggle_is_attivo'])->name('punto-operatore.toggle-is-attivo');
  Route::get('punto-operatore/show', [PuntoOperatoreController::class, 'show'])->name('punto-operatore.show');

  
  // Prima Nota
  Route::get('prima-nota/statistiche', [PrimaNotaController::class, 'statistiche'])->name('prima-nota.statistiche');
  Route::resource('prima-nota', PrimaNotaController::class, ['only' => ['index', 'store']])->names('prima-nota');
  
  // Pagamento
  Route::resource('pagamento', PagamentoController::class, ['only' => ['index', 'store']]);
  Route::get('pagamento/show', [PagamentoController::class, 'show'])->name('pagamento.show');
  
  // Bilancio
  Route::resource('bilancio', BilancioController::class, ['only' => ['index', 'store']]);
  Route::get('bilancio/oggi', [BilancioController::class, 'oggi'])->name('bilancio.oggi');
  
  // Report
  Route::resource('report', ReportController::class, ['only' => ['index', 'store']]);
  Route::get('report/movimenti', [ReportController::class, 'movimenti'])->name('report.movimenti');
  Route::get('report/export-pdf', [ReportController::class, 'exportPdf'])->name('report.export-pdf');


  // Dispositivo
  Route::resource('dispositivo', DispositivoController::class, ['only' => ['index', 'store']]);
  // Monitor
  Route::resource('monitor', MonitorController::class, ['only' => ['index', 'store']]);
  Route::get('monitor/show', [MonitorController::class, 'show'])->name('monitor.show');
  Route::get('monitor/gestisci-contenuto-monitor', [MonitorController::class, 'gestisci_contenuto_monitor'])->name('monitor.gestisci-contenuto-monitor');
  Route::post('monitor/gestisci-contenuto-store', [MonitorController::class, 'gestisci_contenuto_store'])->name('monitor.gestisci-contenuto-store');

  // Saltacoda
  Route::resource('saltacoda', SaltacodaController::class, ['only' => ['index', 'store']]);
  Route::get('saltacoda/attiva', [SaltacodaController::class, 'attiva'])->name('saltacoda.attiva');
  
  // Ordine
  Route::resource('ordine', OrdineController::class, ['only' => ['index', 'store']]);
  Route::get('ordine/show', [OrdineController::class, 'show'])->name('ordine.show');
  Route::get('ordine/show_modal', [OrdineController::class, 'show_modal'])->name('ordine.show_modal');
  
  // Mappa Dispositivi
  Route::resource('mappa-dispositivi', MappaDispositiviController::class, ['only' => ['index', 'store']]);
  // Metodo Pagamento
  Route::resource('metodo-pagamento', MetodoPagamentoController::class, ['only' => ['index', 'store']]);
  Route::post('metodo-pagamento/segresta-wallet/chiE', [MetodoPagamentoController::class, 'segresta_wallet_chiE'])->name('metodo-pagamento.segresta-wallet.chiE');
  //Dashboard
Route::get('dashboard', [HomePageController::class, 'admin_dashboard'])->name('dashboard');

// Carrello
Route::get('carrello', [CarrelloController::class, 'index'])->name('carrello.index');
//Azioni sul carrello
Route::get('carrello/list', [CarrelloController::class, 'list'])->name('carrello.list');
Route::post('carrello/aumenta', [CarrelloController::class, 'aumenta'])->name('carrello.aumenta');
Route::post('carrello/diminuisci', [CarrelloController::class, 'diminuisci'])->name('carrello.diminuisci');
Route::post('carrello/elimina', [CarrelloController::class, 'elimina'])->name('carrello.elimina');
Route::post('carrello/aggiorna_nota', [CarrelloController::class, 'aggiorna_nota'])->name('carrello.aggiorna_nota');
Route::post('carrello/azzera', [CarrelloController::class, 'azzera'])->name('carrello.azzera');
Route::post('carrello/aggiungi-variante', [CarrelloController::class, 'aggiungi_variante'])->name('carrello.aggiungi-variante');
Route::post('carrello/elimina-variante', [CarrelloController::class, 'elimina_variante'])->name('carrello.elimina-variante');
Route::get('carrello/totale', [CarrelloController::class, 'totale'])->name('carrello.totale');
Route::post('carrello/aggiorna_info', [CarrelloController::class, 'aggiorna_info'])->name('carrello.aggiorna_info');
Route::get('carrello/checkout', [CarrelloController::class, 'checkout'])->name('carrello.checkout');
Route::post('carrello/paga_ordine', [CarrelloController::class, 'paga_ordine'])->name('carrello.paga_ordine');

// Riga Ordine
Route::get('riga-ordine/datatable', [RigaOrdineController::class, 'datatable'])->name('riga-ordine.datatable');
Route::post('riga-ordine/store', [RigaOrdineController::class, 'store'])->name('riga-ordine.store');
Route::get('riga-ordine/dettagli', [RigaOrdineController::class, 'dettagli'])->name('riga-ordine.dettagli');
Route::get('riga-ordine/lista-da-chiamare', [RigaOrdineController::class, 'lista_da_chiamare'])->name('riga-ordine.lista-da-chiamare');
Route::get('riga-ordine/lista-chiamate', [RigaOrdineController::class, 'lista_chiamate'])->name('riga-ordine.lista-chiamate');
Route::post('riga-ordine/chiamata', [RigaOrdineController::class, 'chiamata'])->name('riga-ordine.chiamata');
Route::post('riga-ordine/ritiro', [RigaOrdineController::class, 'ritiro'])->name('riga-ordine.ritiro');

// Endpoint
Route::resource('endpoint', EndpointController::class, ['only' => ['index', 'store']]);
Route::get('endpoint/show',[EndpointController::class , 'show'])->name('endpoint.show');
Route::get('endpoint/richiedi-nuovo-product-key', [EndpointController::class, 'richiedi_nuovo_product_key'])->name('endpoint.richiedi-nuovo-product-key');
Route::get('endpoint/istruzioni', [EndpointController::class, 'istruzioni'])->name('endpoint.istruzioni');

// Print Job
Route::resource('code-stampa', PrintJobController::class, ['only' => ['index', 'store']]);
Route::get('code-stampa/show', [PrintJobController::class, 'show'])->name('code-stampa.show');


// Testi
Route::resource('testi', TestiController::class, ['only' => ['index', 'store']]);

// Tavolo
Route::resource('tavolo', TavoloController::class, ['only' => ['index', 'store']]);

//Tombola
Route::resource('tombola', TombolaController::class, ['only' => ['index', 'store']]);
Route::get('tombola/{attivita_id}/tabellone', [TombolaController::class, 'tabellone'])->name('tombola.tabellone');
Route::post('tombola/{attivita_id}/estrai', [TombolaController::class, 'estrai'])->name('tombola.estrai');
Route::post('tombola/{attivita_id}/azzera', [TombolaController::class, 'azzera'])->name('tombola.azzera');
Route::get('tombola/{attivita_id}/estratti', [TombolaController::class, 'estratti'])->name('tombola.estratti');
Route::post('tombola/{attivita_id}/getTabellone', [TombolaController::class, 'getTabellone'])->name('tombola.getTabellone');
});


///////////////////////////////////
///////////////////////////////////

//Rotte SENZA Auth 
Route::prefix('consulta')->group(function () {
// Scontrino per cliente
Route::get('index', [ConsultaController::class, 'index'])->name('consulta.index');
Route::get('scontrino/show/{ordine_id}', [ConsultaController::class, 'scontrino_show'])->name('consulta.scontrino.show');
Route::get('comanda/show/{ordine_id}', [ConsultaController::class, 'comanda_show'])->name('consulta.comanda.show');
Route::get('prenotazione/show', [ConsultaController::class, 'prenotazione_show'])->name('consulta.prenotazione.show');
Route::get('monitor/check-reload', [MonitorController::class, 'checkReload'])->name('consulta.monitor.check-reload');

});

//Rotte per clienti, sena auth
Route::prefix('cliente')->group(function(){
  // Attività
  Route::get('attivita/show', [AttivitaController::class, 'show_public'])->name('cliente.attivita.show');

  // Prenotazione
  Route::get('prenota/form' , [PrenotazioneController::class , 'prenota_form'])->name('prenotazone.prenota_form'); 
  Route::post('prenota' , [PrenotazioneController::class , 'prenota'])->name('prenotazone.prenota'); 
  Route::get('evento/show', [EventoController::class, 'show'])->name('evento.show');
  Route::get('testi/show', [TestiController::class, 'show_cliente'])->name('testi.show_cliente');
  Route::get('punto-vendita', [PuntoVenditaController::class, 'show_cliente'])->name('punto-vendita.cliente.testi.show');

  //NOtifiche ordini pronti
  Route::post('avvisami-quando-il-piatto-e-pronto', [RigaOrdineNotificaController::class, 'salva_fcm_token'])->name('riga-ordine-notifica.salva-fcm-token');
  
  // Saltacoda
  Route::get('saltacoda/show', [SaltacodaController::class, 'show'])->name('cliente.saltacoda.show');
  Route::post('saltacoda/pre-ordine/salva', [SaltacodaController::class, 'pre_ordine_salva'])->name('saltacoda.pre-ordine.salva');
  Route::get('saltacoda/pre-ordine/show', [SaltacodaController::class, 'pre_ordine_show'])->name('saltacoda.pre-ordine.show');

  // Tombola (pubblico, per QR)
  Route::get('tombola/{attivita_id}/estratti', [TombolaController::class, 'estratti'])->name('cliente.tombola.estratti');

});

// Rotte per operatori
Route::prefix('operatore')->group(function(){
  Route::get('/', [OperatoreController::class, 'landing'])->name('operatore.landing');
  Route::post('login', [OperatoreController::class, 'login'])->name('operatore.login');
  Route::post('logout', [OperatoreController::class, 'logout'])->name('operatore.logout');
  
  Route::middleware(['auth:operatore', config('jetstream.auth_session')])->group(function(){
    Route::get('dashboard', [OperatoreController::class, 'dashDispositivi'])->name('operatore.dashDispositivi');
    //punto vendita per operatori
    Route::get('punto-vendita/show', [OperatoreController::class, 'show_dispositivo'])->name('operatore.punto-vendita.show');
    Route::post('punto-vendita/dissocia-dispositivo' , [OperatoreController::class , 'dissocia_dispositivo'])->name('operatore.punto-vendita.dissocia-dispositivo');
    Route::get('punto-vendita/dettagli', [OperatoreController::class, 'dettagli'])->name('operatore.punto-vendita.dettagli');
    Route::get('punto-vendita/riepilogo-cassa', [OperatoreController::class, 'riepilogo_cassa'])->name('operatore.punto-vendita.riepilogo-cassa');
    Route::get('punto-vendita/cerca-pre-ordine', [OperatoreController::class, 'cerca_pre_ordine'])->name('operatore.punto-vendita.cassa.cerca-pre-ordine');  
    Route::post('punto-vendita/importa-pre-ordine', [OperatoreController::class, 'importa_pre_ordine'])->name('operatore.punto-vendita.cassa.importa-pre-ordine');
  

    // Carrello
    // Route::get('carrello/list', [CarrelloController::class, 'list'])->name('carrello.list');
    // Route::post('carrello/aumenta', [CarrelloController::class, 'aumenta'])->name('carrello.aumenta');
    // Route::post('carrello/diminuisci', [CarrelloController::class, 'diminuisci'])->name('carrello.diminuisci');
    // Route::post('carrello/elimina', [CarrelloController::class, 'elimina'])->name('carrello.elimina');
    // Route::post('carrello/aggiorna_nota', [CarrelloController::class, 'aggiorna_nota'])->name('carrello.aggiorna_nota');
    // Route::post('carrello/azzera', [CarrelloController::class, 'azzera'])->name('carrello.azzera');
    // Route::get('carrello/totale', [CarrelloController::class, 'totale'])->name('carrello.totale');
    // Route::post('carrello/aggiorna_info', [CarrelloController::class, 'aggiorna_info'])->name('carrello.aggiorna_info');
    // Route::get('carrello/checkout', [CarrelloController::class, 'checkout'])->name('carrello.checkout');
    // Route::post('carrello/paga_ordine', [CarrelloController::class, 'paga_ordine'])->name('carrello.paga_ordine');
  });

});