<?php

use App\Http\Controllers\Admin\AdminController;
use App\Http\Controllers\Admin\AppBannerSettingController;
use App\Http\Controllers\Admin\AppFaqController;
use App\Http\Controllers\Admin\AppHeroSectionController;
use App\Http\Controllers\Admin\AppHowToUseStepController;
use App\Http\Controllers\Admin\AppPromotionalBannerSettingController;
use App\Http\Controllers\Admin\AppSectionController;
use App\Http\Controllers\Admin\ArchivosController;
use App\Http\Controllers\Admin\BankController;
use App\Http\Controllers\Admin\BasesCondicionesController;
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\EncuestasNpsController;
use App\Http\Controllers\Admin\CiudadesAliasesController;
use App\Http\Controllers\Admin\CiudadesController;
use App\Http\Controllers\Admin\EstacionesController;
use App\Http\Controllers\Admin\EstacionesOmitidasController;
use App\Http\Controllers\Admin\ServiciosController;
use App\Http\Controllers\Admin\InternasController;
use App\Http\Controllers\Admin\LubricantesController;
use App\Http\Controllers\Admin\ListasDifusionController;
use App\Http\Controllers\Admin\PromocionesController;
use App\Http\Controllers\Admin\SeccionesController;
use App\Http\Controllers\Admin\TiposSeccionesController;
use App\Http\Controllers\Auth\AdminPasswordResetController;
use App\Http\Controllers\Auth\AuthController;
use App\Http\Controllers\BolsaTrabajoController;
use App\Http\Controllers\CombustiblesController;
use App\Http\Controllers\DifusionController;
use App\Http\Controllers\EncuestaController;
use App\Http\Controllers\ListController;
use App\Http\Controllers\DoctorController;
use App\Http\Controllers\EmpresaController;
use App\Http\Controllers\FilesController;
use App\Http\Controllers\GrupoSuscriptorController;
use App\Http\Controllers\HeroSectionController;
use App\Http\Controllers\Operadores\InternaController;
use App\Http\Controllers\Operadores\PromocionesController as OperadoresPromocionesController;
use App\Http\Controllers\PartnerController;
use App\Http\Controllers\PlanesController;
use App\Http\Controllers\PortadaController;
use App\Http\Controllers\PostulantesController;
use App\Http\Controllers\Promociones\PromocionesFilesUploadsController;
use App\Http\Controllers\SpecialityController;
use App\Http\Controllers\SuscripcionesController;
use App\Models\Suscripciones;
use Illuminate\Support\Facades\Route;

Route::post('/bolsa-trabajo', [BolsaTrabajoController::class, 'store']);



Route::prefix('/admin')->group(function () {
    Route::post('/login', [AuthController::class, 'adminLogin']);
    Route::post('/login-otp/request', [AuthController::class, 'requestAdminOtp']);
    Route::post('/login-otp/verify', [AuthController::class, 'verifyAdminOtp']);
    Route::post('/forgot-password', [AdminPasswordResetController::class, 'sendResetLink']);
    Route::post('/validate-reset-token', [AdminPasswordResetController::class, 'validateToken']);
    Route::post('/reset-password', [AdminPasswordResetController::class, 'reset']);
    Route::get('/files/{id}', [FilesController::class, 'show']);

    Route::middleware(['auth:sanctum', 'abilities:admin', 'uuid-check'])
        ->name('api.v1.')
        ->group(function () {

            Route::get('/dashboard', [DashboardController::class, 'index']);
            Route::post('/logout', [AuthController::class, 'logout']);
            Route::post('/logout-all', [AuthController::class, 'logoutAllDevice']);
            Route::post('/logout-device', [AuthController::class, 'logoutOtherDevice']);

            Route::prefix('/my-data')->group(function () {
                Route::get('/', [AdminController::class, 'myData']);
                Route::patch('/', [AdminController::class, 'updateMyData']);
            });

            Route::prefix('/devices')->group(function () {
                Route::get('/', [AuthController::class, 'devicesList']);
            });



            Route::prefix('/files/{model}')->group(function () {
                Route::post('/', [FilesController::class, 'store']);
                Route::delete('/{id}', [FilesController::class, 'destroy']);
            });
            //TODO: Uploads
            Route::prefix('uploads')->group(function () {
                //*Files
                Route::resource('/promociones', PromocionesFilesUploadsController::class)
                    ->only('store', 'destroy', 'show')
                    ->names([
                        'store' => 'api.v1.promociones.uploads.store',
                        'destroy' => 'api.v1.promociones.uploads.destroy',
                        'show' => 'api.v1.promociones.uploads.show',
                    ]);
            });

            Route::get('interna/modulo', [InternasController::class, 'getModulos']);
            Route::get('interna/borrador/{slug}', [InternasController::class, 'getBorrador']);


            Route::name('list.')
                ->prefix('list')
                ->group(function () {
                    Route::controller(ListController::class)->group(function () {
                        Route::get('/metodos-pagos', 'metodosPagos')->name('metodos_pagos');
                        Route::get('/estaciones', 'estaciones')->name('estaciones');
                        Route::get('/servicios', 'servicios')->name('servicios');
                        Route::get('/banks', 'banks')->name('banks');
                        Route::get('/cities', 'cities')->name('cities');
                        Route::get('/departamentos', 'departamentos')->name('departamentos');
                    });

                    Route::get('/operadores/modulos', [ArchivosController::class, 'getModulos'])->name('modulos_operadores');
                    Route::get('/suscriptores', [ListasDifusionController::class, 'listar'])->name('suscriptores');
                    Route::get('/grupos-suscriptores', [GrupoSuscriptorController::class, 'listar'])->name('grupos-suscriptores');

                    Route::get('/difusion/modulos', [DifusionController::class, 'getModulos'])->name('modulos_difusion');
                });


            Route::middleware('rootUser')->group(function () {
                Route::resource('/portada', PortadaController::class)->only('index', 'store');
                Route::resource('/bases-condiciones', BasesCondicionesController::class)
                    ->only('index', 'store', 'edit', 'update', 'destroy');
                Route::resource('/difusiones', DifusionController::class)->only('store', 'update', 'destroy', 'index', 'edit');
                Route::post('/estaciones/import', [EstacionesController::class, 'import'])
                    ->name('estaciones.import');
                Route::post('/estaciones/import/skipped', [EstacionesController::class, 'importSkipped'])
                    ->name('estaciones.import.skipped');
                Route::post('/estaciones-omitidas/{id}/resolve', [EstacionesOmitidasController::class, 'resolve'])
                    ->name('estaciones-omitidas.resolve');
                Route::resource('/estaciones-omitidas', EstacionesOmitidasController::class)
                    ->only('index', 'edit', 'update');
                Route::resource('/ciudades', CiudadesController::class)
                    ->parameters(['ciudades' => 'ciudad'])
                    ->only('index', 'store', 'edit', 'update', 'destroy');
                Route::resource('/ciudades-aliases', CiudadesAliasesController::class)
                    ->parameters(['ciudades-aliases' => 'ciudad_alias'])
                    ->only('index', 'store', 'edit', 'update', 'destroy');
                Route::resource('/estaciones', EstacionesController::class)
                    ->only('index', 'store', 'edit', 'update', 'destroy');

                Route::resource('/postulantes', PostulantesController::class)
                    ->only('index', 'destroy');

                Route::resource('/servicios', ServiciosController::class)
                    ->only('index', 'store', 'edit', 'update', 'destroy');

                Route::resource('/lubricantes', LubricantesController::class)
                    ->only('index', 'store', 'edit', 'update', 'destroy');

                Route::resource('/promociones', PromocionesController::class)
                    ->only('index', 'store', 'edit', 'update', 'destroy')
                    ->names([
                        'index' => 'api.v1.promociones.index',
                        'store' => 'api.v1.promociones.store',
                        'edit' => 'api.v1.promociones.edit',
                        'update' => 'api.v1.promociones.update',
                        'destroy' => 'api.v1.promociones.destroy',
                    ]);

                Route::resource('/combustibles', CombustiblesController::class)
                    ->only('index', 'store', 'edit', 'update', 'destroy');

                Route::resource('/archivos', ArchivosController::class)
                    ->only('index', 'store', 'destroy');



                //? Rutas de internas
                Route::prefix('/interna')->name('interna.')->group(function () {
                    Route::prefix('/borrador')->group(function () {
                        Route::post('/', [InternasController::class, 'borrador']);
                        Route::get('/{slug_grupo}/{slug_interna}', [InternasController::class, 'getBorrador']);
                        Route::get('/{slug_grupo}', [InternasController::class, 'getBorrador']);
                        //Route::resource('/interna', InternasController::class);
                    });
                    Route::prefix('/{interna}/secciones')->group(function () {
                        Route::get('/', [SeccionesController::class, 'listarByInterna']);
                        Route::post('/', [SeccionesController::class, 'updateOrderByInterna']);
                        Route::delete('/{id}', [SeccionesController::class, 'deleteByInterna']);
                    });


                    Route::resource('/{slug_grupo}', InternasController::class)
                        ->only(['index']);

                    Route::delete('/{slug_grupo}/{id}', [InternasController::class, 'destroy']);

                    Route::get('/secciones/tipos', [TiposSeccionesController::class, 'listar']);

                    Route::get('/{slug_grupo}/{slug_interna}', [InternasController::class, 'show']);



                    Route::resource('/', InternasController::class)->only('store');
                    Route::put('/{id}', [InternasController::class, 'update']);
                });

                Route::get('/suscripciones', [SuscripcionesController::class, 'index']);

                Route::resource('secciones', SeccionesController::class)->only('store', 'update');


                Route::resource('encuestas', EncuestasNpsController::class)
                    ->only('index', 'edit', 'store', 'update');

                Route::resource('/suscriptores', ListasDifusionController::class)
                    ->only('index', 'store', 'update', 'destroy', 'edit');

                Route::resource('/grupos-suscriptores', GrupoSuscriptorController::class)
                    ->only('index', 'store', 'update', 'edit', 'destroy');

                Route::resource('/app-hero-sections', AppHeroSectionController::class)
                    ->only('index', 'store', 'edit', 'update', 'destroy');

                Route::resource('/app-faqs', AppFaqController::class)
                    ->only('index', 'store', 'edit', 'update', 'destroy');

                Route::resource('/app-how-to-use-steps', AppHowToUseStepController::class)
                    ->only('index', 'store', 'edit', 'update', 'destroy');

                Route::resource('/banks', BankController::class)
                    ->only('index', 'store', 'edit', 'update', 'destroy');

                Route::resource('/app-sections', AppSectionController::class)
                    ->only('index', 'edit', 'update');
                Route::post('/app-sections/reorder', [AppSectionController::class, 'reorder']);

                Route::get('/app-banner-settings', [AppBannerSettingController::class, 'show']);
                Route::post('/app-banner-settings', [AppBannerSettingController::class, 'upsert']);
                Route::get('/app-promotional-banner-settings', [AppPromotionalBannerSettingController::class, 'show']);
                Route::post('/app-promotional-banner-settings', [AppPromotionalBannerSettingController::class, 'upsert']);

                Route::resource('/empresas', EmpresaController::class)
                    ->only('index', 'store');

                //TODO:::> RUTAS SOLO PARA SUPERUSUARIOS
                require __DIR__ . '/ApiRoutes/rootUser.php';
            });

            Route::prefix('publica')->group(function () {
                Route::resource('operadores/promociones', OperadoresPromocionesController::class)->only('index', 'show');
                Route::get('operadores/internas/{slug_modulo}', [InternaController::class, 'index']);
                Route::get('operadores/internas/{slug_modulo}/{id}', [InternaController::class, 'show']);
            });
        });
});
