<?php
use App\Http\Controllers\Admin\AdminUserController;
use App\Http\Controllers\Admin\ApplicationController;
use App\Http\Controllers\Admin\ClientController;
use App\Http\Controllers\Admin\ComplaintController as AdminComplaintController;
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\RecapController;
use App\Http\Controllers\Admin\SettingController;
use App\Http\Controllers\Admin\TechnicianController;
use App\Http\Controllers\Auth\ForceChangePasswordController;
use App\Http\Controllers\Auth\ForgotPasswordController;
use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\ComplaintController;
use App\Http\Controllers\LegalController;
use App\Http\Controllers\ReportVerificationController;
use App\Http\Controllers\Technician\TicketController;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
Route::redirect('/', '/complaint');
Route::get('/complaint', [ComplaintController::class, 'create'])->name('complaint.create');
Route::get('/complaint/track', [ComplaintController::class, 'trackForm'])->name('complaint.track.form');
Route::middleware('throttle:10,60')->group(function () {
Route::post('/complaint', [ComplaintController::class, 'store'])->name('complaint.store');
Route::post('/complaint/track', [ComplaintController::class, 'track'])->name('complaint.track');
});
Route::get('/kebijakan-privasi', [LegalController::class, 'privacy'])->name('legal.privacy');
Route::get('/syarat-ketentuan', [LegalController::class, 'terms'])->name('legal.terms');
Route::get('/v/{token}', [ReportVerificationController::class, 'show'])->name('recap.verify');
Route::middleware('guest')->group(function () {
Route::get('/login', [LoginController::class, 'create'])->name('login');
Route::post('/login', [LoginController::class, 'store'])->name('login.store');
Route::get('/forgot-password', [ForgotPasswordController::class, 'showEmailForm'])->name('password.forgot');
Route::get('/forgot-password/verify', [ForgotPasswordController::class, 'showVerifyForm'])->name('password.forgot.verify');
Route::get('/forgot-password/reset', [ForgotPasswordController::class, 'showResetForm'])->name('password.forgot.reset');
Route::middleware('throttle:5,60')->group(function () {
Route::post('/forgot-password', [ForgotPasswordController::class, 'sendCode'])->name('password.forgot.send');
Route::post('/forgot-password/resend', [ForgotPasswordController::class, 'resend'])->name('password.forgot.resend');
});
Route::post('/forgot-password/verify', [ForgotPasswordController::class, 'verifyCode'])->name('password.forgot.verify.submit');
Route::post('/forgot-password/reset', [ForgotPasswordController::class, 'resetPassword'])->name('password.forgot.reset.submit');
});
Route::middleware('auth')->group(function () {
Route::post('/logout', [LoginController::class, 'destroy'])->name('logout');
Route::get('/password/force-change', [ForceChangePasswordController::class, 'create'])->name('password.force-change');
Route::post('/password/force-change', [ForceChangePasswordController::class, 'store'])->name('password.force-change.store');
Route::get('/login/redirect', function () {
$user = Auth::user();
return redirect()->to($user->isAdmin() ? route('admin.dashboard') : route('technician.tickets.index'));
})->name('login.redirect');
});
Route::middleware(['auth', 'role:admin'])->prefix('admin')->name('admin.')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
Route::get('/technicians', [TechnicianController::class, 'index'])->name('technicians.index');
Route::post('/technicians', [TechnicianController::class, 'store'])->name('technicians.store');
Route::put('/technicians/{technician}', [TechnicianController::class, 'update'])->name('technicians.update');
Route::patch('/technicians/{technician}/toggle-active', [TechnicianController::class, 'toggleActive'])->name('technicians.toggle-active');
Route::get('/admins', [AdminUserController::class, 'index'])->name('admins.index');
Route::post('/admins', [AdminUserController::class, 'store'])->name('admins.store');
Route::put('/admins/{admin}', [AdminUserController::class, 'update'])->name('admins.update');
Route::patch('/admins/{admin}/toggle-active', [AdminUserController::class, 'toggleActive'])->name('admins.toggle-active');
Route::get('/clients', [ClientController::class, 'index'])->name('clients.index');
Route::post('/clients', [ClientController::class, 'store'])->name('clients.store');
Route::put('/clients/{client}', [ClientController::class, 'update'])->name('clients.update');
Route::patch('/clients/{client}/toggle-active', [ClientController::class, 'toggleActive'])->name('clients.toggle-active');
Route::get('/applications', [ApplicationController::class, 'index'])->name('applications.index');
Route::post('/applications', [ApplicationController::class, 'store'])->name('applications.store');
Route::put('/applications/{application}', [ApplicationController::class, 'update'])->name('applications.update');
Route::patch('/applications/{application}/toggle-active', [ApplicationController::class, 'toggleActive'])->name('applications.toggle-active');
Route::get('/complaints', [AdminComplaintController::class, 'index'])->name('complaints.index');
Route::get('/complaints/{complaint}', [AdminComplaintController::class, 'show'])->name('complaints.show');
Route::post('/complaints/{complaint}/close', [AdminComplaintController::class, 'close'])->name('complaints.close');
Route::get('/recap', [RecapController::class, 'index'])->name('recap.index');
Route::get('/recap/show', [RecapController::class, 'show'])->name('recap.show');
Route::get('/settings', [SettingController::class, 'edit'])->name('settings.edit');
Route::post('/settings', [SettingController::class, 'update'])->name('settings.update');
});
Route::middleware(['auth', 'role:technician'])->prefix('technician')->name('technician.')->group(function () {
Route::get('/tickets', [TicketController::class, 'index'])->name('tickets.index');
Route::get('/tickets/{complaint}', [TicketController::class, 'show'])->name('tickets.show');
Route::post('/tickets/{complaint}/claim', [TicketController::class, 'claim'])->name('tickets.claim');
Route::post('/tickets/{complaint}/release', [TicketController::class, 'release'])->name('tickets.release');
Route::post('/tickets/{complaint}/progress', [TicketController::class, 'progress'])->name('tickets.progress');
Route::post('/tickets/{complaint}/resolve', [TicketController::class, 'resolve'])->name('tickets.resolve');
});