<?php

use App\Http\Controllers\Auth\ForgotPasswordController;
use App\Http\Controllers\Auth\ResetPasswordController;
use App\Http\Controllers\Auth\TwoFactorChallengeController;
use App\Http\Controllers\Auth\TwoFactorEnrollController;
use App\Http\Controllers\Auth\WebLoginController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\SuperAdmin\CompanyController;
use App\Http\Controllers\SuperAdmin\CouponController;
use App\Http\Controllers\SuperAdmin\DeductionSectionController;
use App\Http\Controllers\SuperAdmin\IncomeTaxPlanController;
use App\Http\Controllers\SuperAdmin\LeadController;
use App\Http\Controllers\SuperAdmin\PaymentController;
use App\Http\Controllers\SuperAdmin\PaymentSettingsController;
use App\Http\Controllers\SuperAdmin\PlanController;
use App\Http\Controllers\SuperAdmin\SubscriptionController;
use App\Http\Controllers\Web\AccountController;
use App\Http\Controllers\Web\AnnouncementController;
use App\Http\Controllers\Web\ApplicantController;
use App\Http\Controllers\Web\AppreciationController;
use App\Http\Controllers\Web\AssetController;
use App\Http\Controllers\Web\AssetTypeController;
use App\Http\Controllers\Web\AttendanceController;
use App\Http\Controllers\Web\AttendanceImportController;
use App\Http\Controllers\Web\AttendancePolicyController;
use App\Http\Controllers\Web\AttendancePunchController;
use App\Http\Controllers\Web\AttendanceRegularizationController;
use App\Http\Controllers\Web\AttendanceReportController;
use App\Http\Controllers\Web\BiometricDeviceController;
use App\Http\Controllers\Web\CareersController;
use App\Http\Controllers\Web\CompanyPolicyController;
use App\Http\Controllers\Web\ComplaintController;
use App\Http\Controllers\Web\DashboardController as PeopleDashboardController;
use App\Http\Controllers\Web\DepartmentController;
use App\Http\Controllers\Web\DepositCategoryController;
use App\Http\Controllers\Web\DepositController;
use App\Http\Controllers\Web\DesignationController;
use App\Http\Controllers\Web\DocumentController;
use App\Http\Controllers\Web\EmployeeController;
use App\Http\Controllers\Web\EmployeeHrRecordsController;
use App\Http\Controllers\Web\EmployeeImportController;
use App\Http\Controllers\Web\ExpenseController;
use App\Http\Controllers\Web\FinanceDashboardController;
use App\Http\Controllers\Web\FinanceHubController;
use App\Http\Controllers\Web\FnfSettlementController;
use App\Http\Controllers\Web\FormController;
use App\Http\Controllers\Web\FormSubmissionController;
use App\Http\Controllers\Web\GeneratedLetterController;
use App\Http\Controllers\Web\GoalController;
use App\Http\Controllers\Web\HolidayController;
use App\Http\Controllers\Web\HrDashboardController;
use App\Http\Controllers\Web\InterviewController;
use App\Http\Controllers\Web\JobPostingController;
use App\Http\Controllers\Web\LeaveController;
use App\Http\Controllers\Web\LeaveLedgerController;
use App\Http\Controllers\Web\LeaveTypeController;
use App\Http\Controllers\Web\LeaveTypeManagementController;
use App\Http\Controllers\Web\LetterHeadTemplateController;
use App\Http\Controllers\Web\LocationController;
use App\Http\Controllers\Web\MyInterviewsController;
use App\Http\Controllers\Web\MyReferralsController;
use App\Http\Controllers\Web\NotificationController;
use App\Http\Controllers\Web\OffboardingController;
use App\Http\Controllers\Web\OpenRolesController;
use App\Http\Controllers\Web\OrgChartController;
use App\Http\Controllers\Web\PayeeController;
use App\Http\Controllers\Web\PayerController;
use App\Http\Controllers\Web\Payroll\BankExportController;
use App\Http\Controllers\Web\Payroll\EmployeePayrollController;
use App\Http\Controllers\Web\Payroll\IncomeTaxController;
use App\Http\Controllers\Web\Payroll\PayrollHomeController;
use App\Http\Controllers\Web\Payroll\PayrollPtSlabController;
use App\Http\Controllers\Web\Payroll\PayrollRunController;
use App\Http\Controllers\Web\Payroll\PayrollSelfController;
use App\Http\Controllers\Web\Payroll\PayrollSettingsController;
use App\Http\Controllers\Web\Payroll\PayslipController;
use App\Http\Controllers\Web\PerformanceCycleController;
use App\Http\Controllers\Web\PerformanceDashboardController;
use App\Http\Controllers\Web\PerformanceReviewController;
use App\Http\Controllers\Web\PrePaymentController;
use App\Http\Controllers\Web\PromotionController;
use App\Http\Controllers\Web\RecruitmentDashboardController;
use App\Http\Controllers\Web\RegisterLeadController;
use App\Http\Controllers\Web\ReportsController;
use App\Http\Controllers\Web\ResignationController;
use App\Http\Controllers\Web\SalaryComponentController;
use App\Http\Controllers\Web\SalaryGroupController;
use App\Http\Controllers\Web\SavedReportController;
use App\Http\Controllers\Web\Settings\AuditLogController;
use App\Http\Controllers\Web\SettingsController;
use App\Http\Controllers\Web\ShiftController;
use App\Http\Controllers\Web\SubscriptionRequestController;
use App\Http\Controllers\Web\TenantRoleController;
use App\Http\Controllers\Web\TerminationController;
use App\Http\Controllers\Web\VendorController;
use App\Http\Controllers\Web\WarningController;
use App\Http\Controllers\Web\WebsiteContactController;
use App\Http\Controllers\Web\WeekoffRuleController;
use App\Models\EmployeePayroll;
use App\Models\PayrollCycle;
use App\Models\SubscriptionPlan;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    if (Auth::check()) {
        $user = Auth::user();
        if ($user->isSuperAdmin() && ! $user->company_id) {
            return redirect()->route('superadmin.dashboard');
        }

        return redirect()->route('dashboard');
    }
    if (request()->wantsJson()) {
        return response()->json([
            'app' => config('app.name'),
            'version' => '1.0',
            'docs' => url('/docs/api'),
        ]);
    }
    $plans = SubscriptionPlan::with('planFeatures')
        ->where('active', true)
        ->orderBy('base_price_monthly')
        ->limit(3)
        ->get();

    return view('website.home', ['plans' => $plans]);
})->name('website.home');

Route::get('/product', fn () => view('website.product'))->name('website.product');
Route::get('/pricing', function () {
    $plans = SubscriptionPlan::with('planFeatures')
        ->where('active', true)
        ->where(function ($q) {
            $q->where('is_custom', false)->orWhereNull('is_custom');
        })
        ->orderBy('position')
        ->orderBy('base_price_yearly')
        ->get();

    $featureLabels = [
        'payroll' => 'Payroll',
        'compliance_pf_esi_pt' => 'Compliance (PF, ESI, PT)',
        'attendance_biometric' => 'Attendance (biometric)',
        'leave_management' => 'Leave management',
        'api_access' => 'API access',
    ];

    return view('website.pricing', compact('plans', 'featureLabels'));
})->name('website.pricing');
Route::get('/about', fn () => view('website.about'))->name('website.about');
Route::get('/contact', fn () => view('website.contact'))->name('website.contact');
Route::post('/contact', [WebsiteContactController::class, 'store'])->name('website.contact.submit');
Route::get('/legal/terms', fn () => view('website.legal.terms'))->name('website.legal.terms');
Route::get('/legal/privacy', fn () => view('website.legal.privacy'))->name('website.legal.privacy');
Route::get('/legal/refund', fn () => view('website.legal.refund'))->name('website.legal.refund');
Route::get('/legal/disclaimer', fn () => view('website.legal.disclaimer'))->name('website.legal.disclaimer');
Route::get('/design', fn () => view('website.design'))->name('website.design');
Route::get('/development', fn () => view('website.development'))->name('website.development');
Route::get('/services', fn () => view('website.services'))->name('website.services');
Route::get('/security', fn () => view('website.security'))->name('website.security');
Route::get('/payments', fn () => view('website.payments'))->name('website.payments');

Route::get('careers/{companyKey}', [CareersController::class, 'index'])->name('careers.index');
Route::get('careers/{companyKey}/jobs/{jobPosting}', [CareersController::class, 'show'])->name('careers.show');
Route::post('careers/{companyKey}/apply', [CareersController::class, 'apply'])->name('careers.apply')->middleware('throttle:20,1');

Route::redirect('/Design', '/design');
Route::redirect('/Development', '/development');
Route::redirect('/Services', '/services');
Route::redirect('/Security', '/security');
Route::redirect('/Payments', '/payments');
Route::redirect('/Disclaimer', '/legal/disclaimer');

Route::get('/api/docs', function () {
    return redirect()->to(url('/docs/api'));
});

Route::get('/docs/login', function () {
    $path = base_path('docs/LOGIN.md');
    if (! is_file($path)) {
        abort(404);
    }
    $content = nl2br(e(file_get_contents($path)));
    $content = preg_replace('/^###? (.*)$/m', '<h3>$1</h3>', $content);
    $content = preg_replace('/^## (.*)$/m', '<h2>$1</h2>', $content);
    $content = preg_replace('/^# (.*)$/m', '<h1>$1</h1>', $content);
    $content = preg_replace('/\*\*(.*?)\*\*/s', '<strong>$1</strong>', $content);

    return view('doc', ['title' => 'Login', 'content' => $content]);
});

Route::get('/docs/api', function () {
    $path = base_path('docs/API.md');
    if (! is_file($path)) {
        abort(404);
    }
    $content = nl2br(e(file_get_contents($path)));
    $content = preg_replace('/^###? (.*)$/m', '<h3>$1</h3>', $content);
    $content = preg_replace('/^## (.*)$/m', '<h2>$1</h2>', $content);
    $content = preg_replace('/^# (.*)$/m', '<h1>$1</h1>', $content);
    $content = preg_replace('/\*\*(.*?)\*\*/s', '<strong>$1</strong>', $content);

    return view('doc', ['title' => 'API', 'content' => $content]);
});

// Auth
Route::get('login', [WebLoginController::class, 'showLoginForm'])->name('login')->middleware('guest');
Route::post('login', [WebLoginController::class, 'login'])->middleware('throttle:auth-login');
Route::post('logout', [WebLoginController::class, 'logout'])->name('logout')->middleware('auth');

Route::middleware('guest')->group(function () {
    Route::get('forgot-password', [ForgotPasswordController::class, 'create'])->name('password.request');
    Route::post('forgot-password', [ForgotPasswordController::class, 'store'])->name('password.email')->middleware('throttle:auth-login');
    Route::get('reset-password/{token}', [ResetPasswordController::class, 'create'])->name('password.reset');
    Route::post('reset-password', [ResetPasswordController::class, 'store'])->name('password.store')->middleware('throttle:auth-login');
    Route::get('two-factor-challenge', [TwoFactorChallengeController::class, 'show'])->name('two-factor.challenge');
    Route::post('two-factor-challenge', [TwoFactorChallengeController::class, 'verify'])->name('two-factor.verify')->middleware('throttle:auth-two-factor');
    Route::post('two-factor-resend', [TwoFactorChallengeController::class, 'resend'])->name('two-factor.resend')->middleware('throttle:auth-two-factor-resend');
    Route::get('two-factor-enroll', [TwoFactorEnrollController::class, 'show'])->name('two-factor.enroll');
    Route::post('two-factor-enroll/email', [TwoFactorEnrollController::class, 'enableEmail'])->name('two-factor.enroll.email');
    Route::post('two-factor-enroll/totp', [TwoFactorEnrollController::class, 'enableTotp'])->name('two-factor.enroll.totp');
});

Route::get('register', [RegisterLeadController::class, 'show'])->name('register')->middleware('guest');
Route::post('register', [RegisterLeadController::class, 'store'])->name('register.store')->middleware(['guest', 'throttle:auth-login']);
Route::post('register/otp/send', [RegisterLeadController::class, 'sendOtp'])->name('register.otp.send')->middleware(['guest', 'throttle:auth-login']);
Route::post('register/otp/verify', [RegisterLeadController::class, 'verifyOtp'])->name('register.otp.verify')->middleware(['guest', 'throttle:auth-login']);

Route::middleware(['auth', 'account.active'])->group(function () {
    Route::get('notifications/feed', [NotificationController::class, 'feed'])->name('notifications.feed');
    Route::post('notifications/mark-all-read', [NotificationController::class, 'markAllRead'])->name('notifications.mark-all-read');
});

// Dashboard & app (auth + tenant)
Route::middleware(['auth', 'account.active', 'tenant.user', 'tenant', 'tenant.subscription', 'tenant.permission', 'tenant.module', 'tenant.2fa', 'tenant.session'])->group(function () {
    Route::get('dashboard', DashboardController::class)->name('dashboard');
    Route::get('dashboard/self', [DashboardController::class, 'selfDashboard'])->name('dashboard.self');
    Route::get('/people/dashboard', [PeopleDashboardController::class, 'index'])->name('people.dashboard');
    Route::get('employees/export', [EmployeeController::class, 'export'])->name('employees.export');
    Route::get('employees/import', [EmployeeImportController::class, 'index'])->name('employees.import.index');
    Route::post('employees/import', [EmployeeImportController::class, 'store'])->name('employees.import.store');
    Route::get('employees/import/template', [EmployeeImportController::class, 'downloadTemplate'])->name('employees.import.template');
    Route::get('employees/import/{import}', [EmployeeImportController::class, 'show'])->name('employees.import.show');
    Route::resource('employees', EmployeeController::class)->only(['index', 'create', 'store', 'show', 'edit', 'update', 'destroy']);
    Route::post('employees/{employee}/salary-revisions', [EmployeeController::class, 'storeSalaryRevision'])->name('employees.salary-revisions.store');
    Route::get('employees/salary-breakup/{id}', [EmployeeController::class, 'salaryBreakup'])->name('employees.salary-breakup');
    Route::get('departments', [DepartmentController::class, 'index'])->name('departments.index');
    Route::get('departments/create', [DepartmentController::class, 'create'])->name('departments.create');
    Route::post('departments', [DepartmentController::class, 'store'])->name('departments.store');
    Route::get('departments/{department}/edit', [DepartmentController::class, 'edit'])->name('departments.edit');
    Route::put('departments/{department}', [DepartmentController::class, 'update'])->name('departments.update');
    Route::delete('departments/{department}', [DepartmentController::class, 'destroy'])->name('departments.destroy');
    Route::get('designations', [DesignationController::class, 'index'])->name('designations.index');
    Route::get('designations/create', [DesignationController::class, 'create'])->name('designations.create');
    Route::post('designations', [DesignationController::class, 'store'])->name('designations.store');
    Route::get('designations/{designation}/edit', [DesignationController::class, 'edit'])->name('designations.edit');
    Route::put('designations/{designation}', [DesignationController::class, 'update'])->name('designations.update');
    Route::delete('designations/{designation}', [DesignationController::class, 'destroy'])->name('designations.destroy');
    Route::get('locations', [LocationController::class, 'index'])->name('locations.index');
    Route::get('locations/create', [LocationController::class, 'create'])->name('locations.create');
    Route::post('locations', [LocationController::class, 'store'])->name('locations.store');
    Route::get('locations/{location}/edit', [LocationController::class, 'edit'])->name('locations.edit');
    Route::put('locations/{location}', [LocationController::class, 'update'])->name('locations.update');
    Route::delete('locations/{location}', [LocationController::class, 'destroy'])->name('locations.destroy');
    Route::get('org-chart', [OrgChartController::class, 'index'])->name('org-chart.index');
    Route::get('attendance', [AttendanceController::class, 'index'])->name('attendance.index');
    Route::post('attendance/check-in', [AttendanceController::class, 'checkIn'])->name('attendance.check-in');
    Route::post('attendance/check-out', [AttendanceController::class, 'checkOut'])->name('attendance.check-out');
    Route::post('attendance/{attendance}/remote-approve', [AttendanceController::class, 'approveRemote'])->name('attendance.remote.approve');
    Route::post('attendance/{attendance}/remote-reject', [AttendanceController::class, 'rejectRemote'])->name('attendance.remote.reject');
    Route::get('attendance-policy', [AttendancePolicyController::class, 'edit'])->name('attendance-policy.edit');
    Route::put('attendance-policy', [AttendancePolicyController::class, 'update'])->name('attendance-policy.update');
    Route::post('attendance/mark-multi-day', [AttendanceController::class, 'markMultiDay'])->name('attendance.mark-multi-day');
    Route::post('attendance/mark-bulk', [AttendanceController::class, 'markBulk'])->name('attendance.mark-bulk');
    Route::post('attendance/bulk/toggle', [AttendanceController::class, 'toggleBulkStatus'])->name('attendance.bulk.toggle');
    Route::get('attendance/bulk', [AttendanceController::class, 'createBulk'])->name('attendance.bulk');
    Route::get('attendance/reports', [AttendanceReportController::class, 'index'])->name('attendance.reports');
    Route::get('attendance/import', [AttendanceImportController::class, 'index'])->name('attendance.import.index');
    Route::post('attendance/import', [AttendanceImportController::class, 'store'])->name('attendance.import.store');
    Route::get('attendance/import/template', [AttendanceImportController::class, 'downloadTemplate'])->name('attendance.import.template');
    Route::get('attendance/import/{import}/preview', [AttendanceImportController::class, 'preview'])->name('attendance.import.preview');
    Route::post('attendance/import/{import}/confirm', [AttendanceImportController::class, 'confirm'])->name('attendance.import.confirm');
    Route::post('attendance/import/{import}/cancel', [AttendanceImportController::class, 'cancel'])->name('attendance.import.cancel');
    Route::get('attendance/import/{import}/errors', [AttendanceImportController::class, 'downloadErrors'])->name('attendance.import.errors');
    Route::get('attendance/import/{import}', [AttendanceImportController::class, 'show'])->name('attendance.import.show');
    Route::get('shifts', [ShiftController::class, 'index'])->name('shifts.index');
    Route::get('shifts/create', [ShiftController::class, 'create'])->name('shifts.create');
    Route::post('shifts', [ShiftController::class, 'store'])->name('shifts.store');
    Route::get('shifts/{shift}/edit', [ShiftController::class, 'edit'])->name('shifts.edit');
    Route::put('shifts/{shift}', [ShiftController::class, 'update'])->name('shifts.update');
    Route::delete('shifts/{shift}', [ShiftController::class, 'destroy'])->name('shifts.destroy');
    Route::get('weekoff-rules', [WeekoffRuleController::class, 'index'])->name('weekoff-rules.index');
    Route::post('weekoff-rules', [WeekoffRuleController::class, 'store'])->name('weekoff-rules.store');
    Route::put('weekoff-rules/{weekoffRule}', [WeekoffRuleController::class, 'update'])->name('weekoff-rules.update');
    Route::post('weekoff-rules/assign', [WeekoffRuleController::class, 'assign'])->name('weekoff-rules.assign');
    Route::get('weekoff-rules/history/{user}', [WeekoffRuleController::class, 'history'])->name('weekoff-rules.history');

    Route::get('biometric-devices', [BiometricDeviceController::class, 'index'])->name('biometric-devices.index');
    Route::get('biometric-devices/create', [BiometricDeviceController::class, 'create'])->name('biometric-devices.create');
    Route::post('biometric-devices', [BiometricDeviceController::class, 'store'])->name('biometric-devices.store');
    Route::get('biometric-devices/{biometricDevice}', [BiometricDeviceController::class, 'show'])->name('biometric-devices.show');
    Route::get('biometric-devices/{biometricDevice}/edit', [BiometricDeviceController::class, 'edit'])->name('biometric-devices.edit');
    Route::put('biometric-devices/{biometricDevice}', [BiometricDeviceController::class, 'update'])->name('biometric-devices.update');
    Route::delete('biometric-devices/{biometricDevice}', [BiometricDeviceController::class, 'destroy'])->name('biometric-devices.destroy');
    Route::post('biometric-devices/{biometricDevice}/regenerate', [BiometricDeviceController::class, 'regenerateCredentials'])->name('biometric-devices.regenerate');
    Route::post('biometric-devices/{biometricDevice}/sync-month', [BiometricDeviceController::class, 'syncMonth'])->name('biometric-devices.sync-month');
    Route::get('attendance-punches', [AttendancePunchController::class, 'index'])->name('attendance-punches.index');
    Route::post('attendance-punches/{attendancePunch}/retry', [AttendancePunchController::class, 'retry'])->name('attendance-punches.retry');
    Route::get('/leaves/dashboard', [LeaveController::class, 'dashboard'])->name('leaves.dashboard');
    Route::get('leaves/balance-lookup', [LeaveController::class, 'balanceLookup'])->name('leaves.balance-lookup');
    Route::get('leaves/opening-balances/import', [LeaveLedgerController::class, 'importForm'])->name('leaves.opening-balances.import');
    Route::post('leaves/opening-balances/import', [LeaveLedgerController::class, 'importStore'])->name('leaves.opening-balances.import.store');
    Route::get('leaves/opening-balances/template', [LeaveLedgerController::class, 'downloadTemplate'])->name('leaves.opening-balances.template');
    Route::post('leaves/policy', [LeaveLedgerController::class, 'updatePolicy'])->name('leaves.policy.update');
    Route::get('leaves', [LeaveController::class, 'index'])->name('leaves.index');
    Route::get('leaves/create', [LeaveController::class, 'create'])->name('leaves.create');
    Route::post('leaves', [LeaveController::class, 'store'])->name('leaves.store');
    Route::get('leaves/{leave}/edit', [LeaveController::class, 'edit'])->name('leaves.edit');
    Route::put('leaves/{leave}', [LeaveController::class, 'update'])->name('leaves.update');
    Route::delete('leaves/{leave}', [LeaveController::class, 'destroy'])->name('leaves.destroy');
    Route::post('leaves/{leave}/withdraw', [LeaveController::class, 'withdraw'])->name('leaves.withdraw');
    Route::post('leaves/{leave}/withdraw/review', [LeaveController::class, 'reviewWithdraw'])->name('leaves.withdraw.review');
    Route::post('leaves/{leave}/status', [LeaveController::class, 'updateStatus'])->name('leaves.update-status');
    Route::get('leave/popup', [LeaveController::class,  'leavePopup'])->name('leave.popup');
    Route::get('leave-types/manage', [LeaveTypeManagementController::class, 'index'])->name('leave-types.manage');
    Route::put('leave-types/{leaveType}', [LeaveTypeManagementController::class, 'update'])->name('leave-types.update');
    Route::put('leave-types/{leaveType}/rules', [LeaveTypeManagementController::class, 'updateRules'])->name('leave-types.rules.update');
    Route::put('leave-types/{leaveType}/assignments', [LeaveTypeManagementController::class, 'updateAssignments'])->name('leave-types.assignments.update');
    Route::get('leave-types', [LeaveTypeController::class, 'index'])->name('leave-types.index');
    Route::get('leave-types/create', [LeaveTypeController::class, 'create'])->name('leave-types.create');
    Route::post('leave-types', [LeaveTypeController::class, 'store'])->name('leave-types.store');
    Route::get('holidays', [HolidayController::class, 'index'])->name('holidays.index');
    Route::get('holidays/create', [HolidayController::class, 'create'])->name('holidays.create');
    Route::post('holidays', [HolidayController::class, 'store'])->name('holidays.store');
    // Payroll hub + cycle operations
    Route::get('payroll', [PayrollHomeController::class, 'index'])->name('payroll.index');
    Route::get('payroll/my/payslips/{employeePayroll}', [PayrollSelfController::class, 'show'])->name('payroll.my.payslips.show');
    Route::get('payroll/my/payslips/{employeePayroll}/download', [PayrollSelfController::class, 'download'])->name('payroll.my.payslips.download');
    Route::get('payroll/settings', [PayrollSettingsController::class, 'settingsIndex'])->name('payroll.settings');
    Route::post('payroll/settings', [PayrollSettingsController::class, 'settingsStore'])->name('payroll.settings.store');
    Route::post('payroll/pt-slabs', [PayrollPtSlabController::class, 'store'])->name('payroll.pt-slabs.store');
    Route::delete('payroll/pt-slabs/{slab}', [PayrollPtSlabController::class, 'destroy'])->name('payroll.pt-slabs.destroy');
    Route::prefix('payroll/income-tax')->name('payroll.income-tax.')->group(function () {
        Route::post('declaration/preview', [IncomeTaxController::class, 'preview'])->name('preview');
        Route::post('declaration', [IncomeTaxController::class, 'store'])->name('store');
        Route::post('declaration/submit', [IncomeTaxController::class, 'submit'])->name('submit');
        Route::get('review/{declaration}', [IncomeTaxController::class, 'adminReview'])->name('admin.review');
        Route::post('items/{item}/proof', [IncomeTaxController::class, 'uploadProof'])->name('proof.upload');
        Route::get('items/{item}/proof', [IncomeTaxController::class, 'downloadProof'])->name('proof.download');
        Route::get('form16/{financialYear?}', [IncomeTaxController::class, 'form16'])->name('form16');
        Route::post('admin/{declaration}/verify', [IncomeTaxController::class, 'adminVerify'])->name('admin.verify');
        Route::get('admin/{declaration}/form16', [IncomeTaxController::class, 'adminForm16'])->name('admin.form16');
    });
    Route::get('payroll/cycles/{year}/{month}', function (int $year, int $month) {
        return redirect()->route('payroll.index', [
            'tab' => 'run',
            'year' => max(2020, min(2030, $year)),
            'month' => max(1, min(12, $month)),
        ]);
    })->where(['year' => '[0-9]+', 'month' => '[0-9]+'])->name('payroll.cycles.month');
    Route::post('payroll/cycles/{cycle}/run', [PayrollRunController::class, 'run'])->name('payroll.cycles.run');
    Route::post('payroll/cycles/{cycle}/complete', [PayrollRunController::class, 'complete'])->name('payroll.cycles.complete');
    Route::post('payroll/cycles/{cycle}/lock', [PayrollRunController::class, 'lock'])->name('payroll.cycles.lock');
    Route::post('payroll/cycles/{cycle}/unlock', [PayrollRunController::class, 'unlock'])->name('payroll.cycles.unlock');
    Route::get('payroll/cycles/{cycle}/employees/{employeePayroll}', [EmployeePayrollController::class, 'show'])->name('payroll.cycles.employees.show');
    Route::get('payroll/cycles/{cycle}/payslips/{employeePayroll}', [PayslipController::class, 'show'])->name('payroll.cycles.payslips.show');
    Route::get('payroll/cycles/{cycle}/payslips/{employeePayroll}/download', [PayslipController::class, 'download'])->name('payroll.cycles.payslips.download');
    Route::get('payroll/cycles/{cycle}/bank-export', [BankExportController::class, 'download'])->name('payroll.cycles.bank-export');
    Route::get('payroll/cycles/{cycle}/export', [BankExportController::class, 'payrollExport'])->name('payroll.cycles.export');
    // Old bookmarks — no named routes
    Route::redirect('payroll/legacy', '/payroll?tab=run');
    Route::redirect('payroll/v2', '/payroll?tab=run');
    Route::redirect('payroll/v2/audit', '/payroll?tab=audit');
    Route::get('payroll/v2/cycles/{year}/{month}', fn (int $year, int $month) => redirect()->route('payroll.cycles.month', compact('year', 'month')))->where(['year' => '[0-9]+', 'month' => '[0-9]+']);
    Route::get('payroll/v2/cycles/{cycle}/run', function (PayrollCycle $cycle) {
        return redirect()->route('payroll.index', ['tab' => 'run', 'year' => $cycle->year, 'month' => $cycle->month]);
    });
    Route::get('payroll/v2/cycles/{cycle}/employees/{employeePayroll}', fn (PayrollCycle $cycle, EmployeePayroll $employeePayroll) => redirect()->route('payroll.cycles.employees.show', [$cycle, $employeePayroll]));
    Route::get('payroll/v2/cycles/{cycle}/payslips/{employeePayroll}', fn (PayrollCycle $cycle, EmployeePayroll $employeePayroll) => redirect()->route('payroll.cycles.payslips.show', [$cycle, $employeePayroll]));
    Route::get('payroll/v2/cycles/{cycle}/payslips/{employeePayroll}/download', fn (PayrollCycle $cycle, EmployeePayroll $employeePayroll) => redirect()->route('payroll.cycles.payslips.download', [$cycle, $employeePayroll]));
    Route::get('payroll/v2/cycles/{cycle}/bank-export', fn (PayrollCycle $cycle) => redirect()->route('payroll.cycles.bank-export', $cycle));
    Route::get('payroll/v2/cycles/{cycle}/export', fn (PayrollCycle $cycle) => redirect()->route('payroll.cycles.export', $cycle));
    Route::get('salary-groups', [SalaryGroupController::class, 'index'])->name('salary-groups.index');
    Route::get('salary-groups/create', [SalaryGroupController::class, 'create'])->name('salary-groups.create');
    Route::post('salary-groups', [SalaryGroupController::class, 'store'])->name('salary-groups.store');
    Route::get('salary-groups/{salaryGroup}/edit', [SalaryGroupController::class, 'edit'])->name('salary-groups.edit');
    Route::put('salary-groups/{salaryGroup}', [SalaryGroupController::class, 'update'])->name('salary-groups.update');
    Route::get('salary-groups/components/catalog', [SalaryGroupController::class, 'salaryComponents'])->name('salary-groups.components.catalog');
    Route::post('salary-groups/{salaryGroup}/components', [SalaryGroupController::class, 'storeComponent'])->name('salary-groups.components.store');
    Route::delete('salary-groups/{salaryGroup}/components/{salaryGroupComponent}', [SalaryGroupController::class, 'destroyComponent'])->name('salary-groups.components.destroy');
    Route::get('attendance-regularizations', [AttendanceRegularizationController::class, 'index'])->name('attendance-regularizations.index');
    Route::get('attendance-regularizations/create', [AttendanceRegularizationController::class, 'create'])->name('attendance-regularizations.create');
    Route::post('attendance-regularizations', [AttendanceRegularizationController::class, 'store'])->name('attendance-regularizations.store');
    Route::post('attendance-regularizations/bulk-review', [AttendanceRegularizationController::class, 'bulkReview'])->name('attendance-regularizations.bulk-review');
    Route::post('attendance-regularizations/{attendanceRegularization}/approve', [AttendanceRegularizationController::class, 'approve'])->name('attendance-regularizations.approve');
    Route::post('attendance-regularizations/{attendanceRegularization}/reject', [AttendanceRegularizationController::class, 'reject'])->name('attendance-regularizations.reject');
    Route::get('salary-components', [SalaryComponentController::class, 'index'])->name('salary-components.index');
    Route::get('salary-components/create', [SalaryComponentController::class, 'create'])->name('salary-components.create');
    Route::post('salary-components', [SalaryComponentController::class, 'store'])->name('salary-components.store');
    Route::get('salary-components/{salaryComponent}/edit', [SalaryComponentController::class, 'edit'])->name('salary-components.edit');
    Route::put('salary-components/{salaryComponent}', [SalaryComponentController::class, 'update'])->name('salary-components.update');
    Route::delete('salary-components/{salaryComponent}', [SalaryComponentController::class, 'destroy'])->name('salary-components.destroy');
    Route::get('/assets/dashboard', [AssetController::class, 'dashboard'])->name('assets.dashboard');
    Route::get('assets', [AssetController::class, 'index'])->name('assets.index');
    Route::get('assets/create', [AssetController::class, 'create'])->name('assets.create');
    Route::post('assets', [AssetController::class, 'store'])->name('assets.store');
    Route::get('assets/{asset}/edit', [AssetController::class, 'edit'])->name('assets.edit');
    Route::put('assets/{asset}', [AssetController::class, 'update'])->name('assets.update');
    Route::delete('assets/{asset}', [AssetController::class, 'destroy'])->name('assets.destroy');
    Route::post('assets/{asset}/return', [AssetController::class, 'returnAsset'])->name('assets.return');
    Route::post('assets/{asset}/dispose', [AssetController::class, 'dispose'])->name('assets.dispose');
    Route::get('asset-types', [AssetTypeController::class, 'index'])->name('asset-types.index');
    Route::get('asset-types/create', [AssetTypeController::class, 'create'])->name('asset-types.create');
    Route::post('asset-types', [AssetTypeController::class, 'store'])->name('asset-types.store');
    Route::get('/finance/dashboard', [FinanceDashboardController::class, 'index'])->name('finance.dashboard');
    Route::get('/finance/self', [FinanceHubController::class, 'self'])->name('finance.self');
    Route::get('/finance/team', [FinanceHubController::class, 'team'])->name('finance.team');
    Route::get('/finance/operational', [FinanceHubController::class, 'operational'])->name('finance.operational');
    Route::get('/finance/my-advances', [FinanceHubController::class, 'myAdvances'])->name('finance.my-advances');
    Route::get('accounts', [AccountController::class, 'index'])->name('accounts.index');
    Route::get('accounts/create', [AccountController::class, 'create'])->name('accounts.create');
    Route::post('accounts', [AccountController::class, 'store'])->name('accounts.store');
    Route::get('accounts/{account}/edit', [AccountController::class, 'edit'])->name('accounts.edit');
    Route::put('accounts/{account}', [AccountController::class, 'update'])->name('accounts.update');
    Route::delete('accounts/{account}', [AccountController::class, 'destroy'])->name('accounts.destroy');
    Route::get('expenses', [ExpenseController::class, 'index'])->name('expenses.index');
    Route::get('expenses/create', [ExpenseController::class, 'create'])->name('expenses.create');
    Route::post('expenses', [ExpenseController::class, 'store'])->name('expenses.store');
    Route::get('expenses/{expense}', [ExpenseController::class, 'show'])->name('expenses.show');
    Route::get('expenses/{expense}/edit', [ExpenseController::class, 'edit'])->name('expenses.edit');
    Route::put('expenses/{expense}', [ExpenseController::class, 'update'])->name('expenses.update');
    Route::post('expenses/{expense}/status', [ExpenseController::class, 'updateStatus'])->name('expenses.update-status');
    Route::delete('expenses/{expense}', [ExpenseController::class, 'destroy'])->name('expenses.destroy');
    Route::get('deposits', [DepositController::class, 'index'])->name('deposits.index');
    Route::get('deposits/create', [DepositController::class, 'create'])->name('deposits.create');
    Route::post('deposits', [DepositController::class, 'store'])->name('deposits.store');
    Route::get('deposits/{deposit}/edit', [DepositController::class, 'edit'])->name('deposits.edit');
    Route::put('deposits/{deposit}', [DepositController::class, 'update'])->name('deposits.update');
    Route::delete('deposits/{deposit}', [DepositController::class, 'destroy'])->name('deposits.destroy');
    Route::get('/documents/dashboard', [DocumentController::class, 'dashboard'])->name('documents.dashboard');
    Route::get('documents', [DocumentController::class, 'index'])->name('documents.index');
    Route::get('documents/create', [DocumentController::class, 'create'])->name('documents.create');
    Route::post('documents', [DocumentController::class, 'store'])->name('documents.store');
    Route::get('documents/{document}/download', [DocumentController::class, 'download'])->name('documents.download');
    Route::delete('documents/{document}', [DocumentController::class, 'destroy'])->name('documents.destroy');
    Route::post('employees/{employee}/documents', [EmployeeController::class, 'storeDocument'])->name('employees.documents.store');
    Route::get('my-hr-records', [EmployeeHrRecordsController::class, 'index'])->name('my-hr-records.index');
    Route::get('warnings', [WarningController::class, 'index'])->name('warnings.index');
    Route::get('/hr/dashboard', [HrDashboardController::class, 'index'])->name('hr.dashboard');
    Route::get('warnings/create', [WarningController::class, 'create'])->name('warnings.create');
    Route::post('warnings', [WarningController::class, 'store'])->name('warnings.store');
    Route::get('complaints', [ComplaintController::class, 'index'])->name('complaints.index');
    Route::get('complaints/create', [ComplaintController::class, 'create'])->name('complaints.create');
    Route::post('complaints', [ComplaintController::class, 'store'])->name('complaints.store');
    Route::get('complaints/{complaint}/edit', [ComplaintController::class, 'edit'])->name('complaints.edit');
    Route::put('complaints/{complaint}', [ComplaintController::class, 'update'])->name('complaints.update');
    Route::delete('complaints/{complaint}', [ComplaintController::class, 'destroy'])->name('complaints.destroy');
    Route::get('promotions', [PromotionController::class, 'index'])->name('promotions.index');
    Route::get('promotions/create', [PromotionController::class, 'create'])->name('promotions.create');
    Route::post('promotions', [PromotionController::class, 'store'])->name('promotions.store');
    Route::get('offboardings', [OffboardingController::class, 'index'])->name('offboardings.index');
    Route::get('offboardings/create', [OffboardingController::class, 'create'])->name('offboardings.create');
    Route::post('offboardings', [OffboardingController::class, 'store'])->name('offboardings.store');
    Route::get('offboardings/{offboarding}', [OffboardingController::class, 'show'])->name('offboardings.show');
    Route::post('offboardings/checklist/{item}', [OffboardingController::class, 'updateChecklist'])->name('offboardings.checklist.update');
    Route::get('fnf/{fnf}', [FnfSettlementController::class, 'show'])->name('fnf.show');
    Route::put('fnf/{fnf}', [FnfSettlementController::class, 'update'])->name('fnf.update');
    Route::post('fnf/{fnf}/recalculate', [FnfSettlementController::class, 'recalculate'])->name('fnf.recalculate');
    Route::post('fnf/{fnf}/approve', [FnfSettlementController::class, 'approve'])->name('fnf.approve');
    Route::post('fnf/{fnf}/mark-paid', [FnfSettlementController::class, 'markPaid'])->name('fnf.mark-paid');
    Route::get('fnf/{fnf}/download', [FnfSettlementController::class, 'download'])->name('fnf.download');
    Route::get('announcements', [AnnouncementController::class, 'index'])->name('announcements.index');
    Route::get('announcements/create', [AnnouncementController::class, 'create'])->name('announcements.create');
    Route::post('announcements', [AnnouncementController::class, 'store'])->name('announcements.store');
    Route::get('announcements/attachments/{attachment}/download', [AnnouncementController::class, 'downloadAttachment'])->name('announcements.attachments.download');
    Route::get('announcements/{announcement}/edit', [AnnouncementController::class, 'edit'])->name('announcements.edit');
    Route::put('announcements/{announcement}', [AnnouncementController::class, 'update'])->name('announcements.update');
    Route::get('reports', [ReportsController::class, 'index'])->name('reports.index');
    Route::get('reports/saved', [SavedReportController::class, 'index'])->name('reports.saved.index');
    Route::post('reports/saved', [SavedReportController::class, 'store'])->name('reports.saved.store');
    Route::get('reports/saved/{savedReport}/run', [SavedReportController::class, 'run'])->name('reports.saved.run');
    Route::delete('reports/saved/{savedReport}', [SavedReportController::class, 'destroy'])->name('reports.saved.destroy');
    Route::get('reports/performance/export', [ReportsController::class, 'exportPerformance'])->name('reports.performance.export');
    Route::get('reports/audit/export', [ReportsController::class, 'exportAudit'])->name('reports.audit.export');
    Route::get('reports/expenses/export', [ReportsController::class, 'exportExpenses'])->name('reports.expenses.export');
    Route::get('reports/form-submissions/export', [ReportsController::class, 'exportFormSubmissions'])->name('reports.form-submissions.export');
    Route::get('settings/home', [SettingsController::class, 'home'])->name('settings.home');
    Route::get('settings/roles', [TenantRoleController::class, 'index'])->name('tenant-roles.index');
    Route::get('settings/roles/create', [TenantRoleController::class, 'create'])->name('tenant-roles.create');
    Route::post('settings/roles', [TenantRoleController::class, 'store'])->name('tenant-roles.store');
    Route::get('settings/roles/{role}/edit', [TenantRoleController::class, 'edit'])->name('tenant-roles.edit');
    Route::put('settings/roles/{role}', [TenantRoleController::class, 'update'])->name('tenant-roles.update');
    Route::delete('settings/roles/{role}', [TenantRoleController::class, 'destroy'])->name('tenant-roles.destroy');
    Route::get('settings', [SettingsController::class, 'index'])->name('settings.index');
    Route::post('settings', [SettingsController::class, 'store'])->name('settings.store');
    Route::post('settings/logo', [SettingsController::class, 'logoStore'])->name('settings.logo.store');
    Route::delete('settings/logo', [SettingsController::class, 'logoDestroy'])->name('settings.logo.destroy');
    Route::get('settings/email', [SettingsController::class, 'emailIndex'])->name('settings.email');
    Route::post('settings/email', [SettingsController::class, 'emailStore'])->name('settings.email.store');
    Route::post('settings/email/test', [SettingsController::class, 'emailTestMail'])->name('settings.email.test');
    Route::get('settings/profile', [SettingsController::class, 'profileIndex'])->name('settings.profile');
    Route::put('settings/profile', [SettingsController::class, 'profileUpdate'])->name('settings.profile.update');
    Route::put('settings/profile/basic', [SettingsController::class, 'updateProfileBasic'])->name('settings.profile.basic.update');
    Route::put('settings/profile/work', [SettingsController::class, 'updateProfileWork'])->name('settings.profile.work.update');
    Route::put('settings/profile/bank', [SettingsController::class, 'updateProfileBank'])->name('settings.profile.bank.update');
    Route::post('settings/profile/two-factor/enable', [SettingsController::class, 'enableTwoFactor'])->name('settings.profile.two-factor.enable');
    Route::post('settings/profile/two-factor/enable-totp', [SettingsController::class, 'enableTotpTwoFactor'])->name('settings.profile.two-factor.enable-totp');
    Route::post('settings/profile/two-factor/disable', [SettingsController::class, 'disableTwoFactor'])->name('settings.profile.two-factor.disable');
    Route::get('settings/profile/export-data', [SettingsController::class, 'exportPersonalData'])->name('settings.profile.export-data');
    Route::delete('settings/profile/sessions/{userSession}', [SettingsController::class, 'revokeSession'])->name('settings.profile.sessions.revoke');
    Route::put('settings/profile/intro', [SettingsController::class, 'updateSelfIntro'])->name('settings.profile.intro.update');
    Route::put('settings/company', [SettingsController::class, 'companyUpdate'])->name('settings.company.update');
    Route::put('settings/security', [SettingsController::class, 'securityUpdate'])->name('settings.security.update');
    Route::get('settings/audit', [AuditLogController::class, 'index'])->name('settings.audit');
    Route::get('subscription/request', [SubscriptionRequestController::class, 'create'])->name('subscription.request');
    Route::post('subscription/request', [SubscriptionRequestController::class, 'store'])->name('subscription.request.store');
    Route::post('subscription/quote', [SubscriptionRequestController::class, 'quote'])->name('subscription.quote');
    Route::post('subscription/checkout/order', [SubscriptionRequestController::class, 'createCheckoutOrder'])->name('subscription.checkout.order');
    Route::post('subscription/checkout/verify', [SubscriptionRequestController::class, 'verifyCheckout'])->name('subscription.checkout.verify');
    // Phase 4 – optional tenant modules
    Route::get('my/resignation', [ResignationController::class, 'selfCreate'])->name('resignations.self.create');
    Route::post('my/resignation', [ResignationController::class, 'selfStore'])->name('resignations.self.store');
    Route::get('policies', [CompanyPolicyController::class, 'portal'])->name('company-policies.portal');
    Route::get('policies/{companyPolicy}', [CompanyPolicyController::class, 'show'])->name('company-policies.show');
    Route::post('policies/{companyPolicy}/acknowledge', [CompanyPolicyController::class, 'acknowledge'])->name('company-policies.acknowledge');
    Route::get('company-policies', [CompanyPolicyController::class, 'index'])->name('company-policies.index');
    Route::get('company-policies/create', [CompanyPolicyController::class, 'create'])->name('company-policies.create');
    Route::post('company-policies', [CompanyPolicyController::class, 'store'])->name('company-policies.store');
    Route::get('company-policies/{companyPolicy}/edit', [CompanyPolicyController::class, 'edit'])->name('company-policies.edit');
    Route::put('company-policies/{companyPolicy}', [CompanyPolicyController::class, 'update'])->name('company-policies.update');
    Route::get('company-policies/{companyPolicy}/acknowledgments', [CompanyPolicyController::class, 'acknowledgments'])->name('company-policies.acknowledgments');
    Route::delete('company-policies/{companyPolicy}', [CompanyPolicyController::class, 'destroy'])->name('company-policies.destroy');
    Route::get('letter-head-templates', [LetterHeadTemplateController::class, 'index'])->name('letter-head-templates.index');
    Route::get('letter-head-templates/create', [LetterHeadTemplateController::class, 'create'])->name('letter-head-templates.create');
    Route::post('letter-head-templates', [LetterHeadTemplateController::class, 'store'])->name('letter-head-templates.store');
    Route::get('letter-head-templates/{letterHeadTemplate}/edit', [LetterHeadTemplateController::class, 'edit'])->name('letter-head-templates.edit');
    Route::put('letter-head-templates/{letterHeadTemplate}', [LetterHeadTemplateController::class, 'update'])->name('letter-head-templates.update');
    Route::get('letter-head-templates/{letterHeadTemplate}/preview', [LetterHeadTemplateController::class, 'preview'])->name('letter-head-templates.preview');
    Route::get('letter-head-templates/{letterHeadTemplate}/pdf', [LetterHeadTemplateController::class, 'downloadPdf'])->name('letter-head-templates.pdf');
    Route::delete('letter-head-templates/{letterHeadTemplate}', [LetterHeadTemplateController::class, 'destroy'])->name('letter-head-templates.destroy');

    Route::get('generated-letters', [GeneratedLetterController::class, 'index'])->name('generated-letters.index');
    Route::get('generated-letters/create', [GeneratedLetterController::class, 'create'])->name('generated-letters.create');
    Route::post('generated-letters', [GeneratedLetterController::class, 'store'])->name('generated-letters.store');
    Route::get('generated-letters/{generatedLetter}/edit', [GeneratedLetterController::class, 'edit'])->name('generated-letters.edit');
    Route::put('generated-letters/{generatedLetter}', [GeneratedLetterController::class, 'update'])->name('generated-letters.update');
    Route::get('generated-letters/{generatedLetter}', [GeneratedLetterController::class, 'show'])->name('generated-letters.show');
    Route::get('generated-letters/{generatedLetter}/pdf', [GeneratedLetterController::class, 'downloadPdf'])->name('generated-letters.pdf');
    Route::get('vendors', [VendorController::class, 'index'])->name('vendors.index');
    Route::get('vendors/create', [VendorController::class, 'create'])->name('vendors.create');
    Route::post('vendors', [VendorController::class, 'store'])->name('vendors.store');
    Route::get('vendors/{vendor}/edit', [VendorController::class, 'edit'])->name('vendors.edit');
    Route::put('vendors/{vendor}', [VendorController::class, 'update'])->name('vendors.update');
    Route::delete('vendors/{vendor}', [VendorController::class, 'destroy'])->name('vendors.destroy');
    Route::get('resignations', [ResignationController::class, 'index'])->name('resignations.index');
    Route::get('resignations/create', [ResignationController::class, 'create'])->name('resignations.create');
    Route::post('resignations', [ResignationController::class, 'store'])->name('resignations.store');
    Route::get('resignations/{resignation}/edit', [ResignationController::class, 'edit'])->name('resignations.edit');
    Route::put('resignations/{resignation}', [ResignationController::class, 'update'])->name('resignations.update');
    Route::post('resignations/{resignation}/status', [ResignationController::class, 'updateStatus'])->name('resignations.update-status');
    Route::delete('resignations/{resignation}', [ResignationController::class, 'destroy'])->name('resignations.destroy');
    Route::get('terminations', [TerminationController::class, 'index'])->name('terminations.index');
    Route::get('terminations/create', [TerminationController::class, 'create'])->name('terminations.create');
    Route::post('terminations', [TerminationController::class, 'store'])->name('terminations.store');
    Route::get('terminations/{termination}/edit', [TerminationController::class, 'edit'])->name('terminations.edit');
    Route::put('terminations/{termination}', [TerminationController::class, 'update'])->name('terminations.update');
    Route::delete('terminations/{termination}', [TerminationController::class, 'destroy'])->name('terminations.destroy');
    Route::get('payees', [PayeeController::class, 'index'])->name('payees.index');
    Route::get('payees/create', [PayeeController::class, 'create'])->name('payees.create');
    Route::post('payees', [PayeeController::class, 'store'])->name('payees.store');
    Route::get('payees/{payee}/edit', [PayeeController::class, 'edit'])->name('payees.edit');
    Route::put('payees/{payee}', [PayeeController::class, 'update'])->name('payees.update');
    Route::delete('payees/{payee}', [PayeeController::class, 'destroy'])->name('payees.destroy');

    Route::get('pre-payments', [PrePaymentController::class, 'index'])->name('pre-payments.index');
    Route::get('pre-payments/create', [PrePaymentController::class, 'create'])->name('pre-payments.create');
    Route::post('pre-payments', [PrePaymentController::class, 'store'])->name('pre-payments.store');
    Route::get('pre-payments/{prePayment}/edit', [PrePaymentController::class, 'edit'])->name('pre-payments.edit');
    Route::put('pre-payments/{prePayment}', [PrePaymentController::class, 'update'])->name('pre-payments.update');
    Route::patch('pre-payments/{prePayment}/cancel', [PrePaymentController::class, 'cancel'])->name('pre-payments.cancel');
    Route::delete('pre-payments/{prePayment}', [PrePaymentController::class, 'destroy'])->name('pre-payments.destroy');
    Route::get('payers', [PayerController::class, 'index'])->name('payers.index');
    Route::get('payers/create', [PayerController::class, 'create'])->name('payers.create');
    Route::post('payers', [PayerController::class, 'store'])->name('payers.store');
    Route::get('payers/{payer}/edit', [PayerController::class, 'edit'])->name('payers.edit');
    Route::put('payers/{payer}', [PayerController::class, 'update'])->name('payers.update');
    Route::delete('payers/{payer}', [PayerController::class, 'destroy'])->name('payers.destroy');
    Route::get('deposit-categories', [DepositCategoryController::class, 'index'])->name('deposit-categories.index');
    Route::get('deposit-categories/create', [DepositCategoryController::class, 'create'])->name('deposit-categories.create');
    Route::post('deposit-categories', [DepositCategoryController::class, 'store'])->name('deposit-categories.store');
    Route::get('deposit-categories/{depositCategory}/edit', [DepositCategoryController::class, 'edit'])->name('deposit-categories.edit');
    Route::put('deposit-categories/{depositCategory}', [DepositCategoryController::class, 'update'])->name('deposit-categories.update');
    Route::delete('deposit-categories/{depositCategory}', [DepositCategoryController::class, 'destroy'])->name('deposit-categories.destroy');
    // Phase 5 – form submissions & polish
    Route::get('forms/portal', [FormSubmissionController::class, 'portal'])->name('forms.portal');
    Route::get('forms/{form}/fill', [FormSubmissionController::class, 'fill'])->name('forms.fill');
    Route::post('forms/{form}/submit', [FormSubmissionController::class, 'store'])->name('forms.submit');
    Route::get('form-submissions', [FormSubmissionController::class, 'index'])->name('form-submissions.index');
    Route::get('form-submissions/export', [FormSubmissionController::class, 'export'])->name('form-submissions.export');
    Route::post('form-submissions/{formSubmission}/status', [FormSubmissionController::class, 'updateStatus'])->name('form-submissions.update-status');
    Route::get('form-submissions/{formSubmission}', [FormSubmissionController::class, 'show'])->name('form-submissions.show');
    Route::get('forms', [FormController::class, 'index'])->name('forms.index');
    Route::get('forms/create', [FormController::class, 'create'])->name('forms.create');
    Route::post('forms', [FormController::class, 'store'])->name('forms.store');
    Route::get('forms/{form}/edit', [FormController::class, 'edit'])->name('forms.edit');
    Route::put('forms/{form}', [FormController::class, 'update'])->name('forms.update');
    Route::post('forms/{form}/status', [FormController::class, 'updateStatus'])->name('forms.update-status');
    Route::delete('forms/{form}', [FormController::class, 'destroy'])->name('forms.destroy');
    Route::get('appreciations', [AppreciationController::class, 'index'])->name('appreciations.index');
    Route::get('appreciations/create', [AppreciationController::class, 'create'])->name('appreciations.create');
    Route::post('appreciations', [AppreciationController::class, 'store'])->name('appreciations.store');
    Route::get('appreciations/{appreciation}/edit', [AppreciationController::class, 'edit'])->name('appreciations.edit');
    Route::put('appreciations/{appreciation}', [AppreciationController::class, 'update'])->name('appreciations.update');
    Route::delete('appreciations/{appreciation}', [AppreciationController::class, 'destroy'])->name('appreciations.destroy');
    Route::get('/recruitment/dashboard', [RecruitmentDashboardController::class, 'index'])->name('recruitment.dashboard');
    Route::get('/recruitment/open-roles', [OpenRolesController::class, 'index'])->name('recruitment.open-roles');
    Route::get('/recruitment/my-interviews', [MyInterviewsController::class, 'index'])->name('recruitment.my-interviews');
    Route::get('/recruitment/my-referrals', [MyReferralsController::class, 'index'])->name('recruitment.my-referrals');
    Route::get('/recruitment/my-referrals/{applicant}', [MyReferralsController::class, 'show'])->name('recruitment.my-referrals.show');
    Route::resource('job-postings', JobPostingController::class)->except(['show']);
    Route::get('applicants/refer', [ApplicantController::class, 'refer'])->name('applicants.refer');
    Route::post('applicants/refer', [ApplicantController::class, 'storeRefer'])->name('applicants.refer.store');
    Route::get('applicants/{applicant}/resume', [ApplicantController::class, 'downloadResume'])->name('applicants.resume.download');
    Route::patch('applicants/{applicant}/stage', [ApplicantController::class, 'updateStage'])->name('applicants.update-stage');
    Route::resource('applicants', ApplicantController::class);
    Route::resource('interviews', InterviewController::class)->except(['show']);
    Route::resource('goals', GoalController::class)->except(['show']);
    Route::get('/performance/dashboard', [PerformanceDashboardController::class, 'index'])->name('performance.dashboard');
    Route::resource('performance-cycles', PerformanceCycleController::class)->except(['show']);
    Route::get('performance-cycles/{performance_cycle}', [PerformanceCycleController::class, 'show'])->name('performance-cycles.show');
    Route::post('performance-cycles/{performance_cycle}/launch', [PerformanceCycleController::class, 'launch'])->name('performance-cycles.launch');
    Route::post('performance-cycles/{performance_cycle}/close', [PerformanceCycleController::class, 'close'])->name('performance-cycles.close');
    Route::resource('performance-reviews', PerformanceReviewController::class)->except(['show']);
});

// Super Admin
Route::middleware(['auth', 'account.active', 'superadmin'])->prefix('superadmin')->name('superadmin.')->group(function () {
    Route::get('dashboard', App\Http\Controllers\SuperAdmin\DashboardController::class)->name('dashboard');
    Route::get('companies', [CompanyController::class, 'index'])->name('companies.index');
    Route::get('companies/{company}/edit', [CompanyController::class, 'edit'])->name('companies.edit');
    Route::put('companies/{company}', [CompanyController::class, 'update'])->name('companies.update');
    Route::get('companies/{company}/change-plan', [CompanyController::class, 'changePlan'])->name('companies.change-plan');
    Route::post('companies/{company}/change-plan', [CompanyController::class, 'storeChangePlan'])->name('companies.change-plan.store');
    Route::post('companies/{company}/admin-password', [CompanyController::class, 'updateAdminPassword'])->name('companies.admin-password.update');
    Route::get('offline-requests', [App\Http\Controllers\SuperAdmin\SubscriptionRequestController::class, 'index'])->name('offline-requests.index');
    Route::get('offline-requests/{subscriptionRequest}/approve', [App\Http\Controllers\SuperAdmin\SubscriptionRequestController::class, 'approveForm'])->name('offline-requests.approve');
    Route::post('offline-requests/{subscriptionRequest}/approve', [App\Http\Controllers\SuperAdmin\SubscriptionRequestController::class, 'approve'])->name('offline-requests.approve.store');
    Route::post('offline-requests/{subscriptionRequest}/reject', [App\Http\Controllers\SuperAdmin\SubscriptionRequestController::class, 'reject'])->name('offline-requests.reject');
    Route::get('subscriptions', [SubscriptionController::class, 'index'])->name('subscriptions.index');
    Route::post('plans/{plan}/toggle-active', [PlanController::class, 'toggleActive'])->name('plans.toggle-active');
    Route::resource('plans', PlanController::class)->except(['show']);
    Route::post('coupons/{coupon}/toggle-active', [CouponController::class, 'toggleActive'])->name('coupons.toggle-active');
    Route::resource('coupons', CouponController::class)->except(['show']);
    Route::get('payments', [PaymentController::class, 'index'])->name('payments.index');
    Route::post('payments/offline', [PaymentController::class, 'storeOffline'])->name('payments.offline');
    Route::post('payments/razorpay/order', [PaymentController::class, 'createRazorpayOrder'])->name('payments.razorpay.order');
    Route::post('payments/razorpay/verify', [PaymentController::class, 'verifyRazorpay'])->name('payments.razorpay.verify');
    Route::resource('income-tax-plans', IncomeTaxPlanController::class)->except(['show']);
    Route::resource('deduction-sections', DeductionSectionController::class)->except(['show']);
    Route::get('leads', [LeadController::class, 'index'])->name('leads.index');
    Route::get('leads/{lead}', [LeadController::class, 'show'])->name('leads.show');
    Route::post('leads/{lead}/status', [LeadController::class, 'updateStatus'])->name('leads.status');
    Route::post('leads/{lead}/convert', [LeadController::class, 'convertToCompany'])->name('leads.convert');
    Route::post('leads/{lead}/followups', [LeadController::class, 'storeFollowup'])->name('leads.followups.store');
    Route::post('leads/{lead}/followups/{followup}/complete', [LeadController::class, 'completeFollowup'])->name('leads.followups.complete');
    Route::post('leads/{lead}/meeting', [LeadController::class, 'scheduleMeeting'])->name('leads.meeting.schedule');
    Route::get('settings', [App\Http\Controllers\SuperAdmin\SettingsController::class, 'index'])->name('settings.index');
    Route::post('settings', [App\Http\Controllers\SuperAdmin\SettingsController::class, 'store'])->name('settings.store');
    Route::get('settings/email', [App\Http\Controllers\SuperAdmin\SettingsController::class, 'emailIndex'])->name('settings.email');
    Route::post('settings/email', [App\Http\Controllers\SuperAdmin\SettingsController::class, 'emailStore'])->name('settings.email.store');
    Route::post('settings/email/test', [App\Http\Controllers\SuperAdmin\SettingsController::class, 'emailTestMail'])->name('settings.email.test');
    Route::get('settings/sms', [App\Http\Controllers\SuperAdmin\SettingsController::class, 'smsIndex'])->name('settings.sms');
    Route::post('settings/sms', [App\Http\Controllers\SuperAdmin\SettingsController::class, 'smsStore'])->name('settings.sms.store');
    Route::get('settings/whatsapp', [App\Http\Controllers\SuperAdmin\SettingsController::class, 'whatsappIndex'])->name('settings.whatsapp');
    Route::post('settings/whatsapp', [App\Http\Controllers\SuperAdmin\SettingsController::class, 'whatsappStore'])->name('settings.whatsapp.store');
    Route::get('settings/profile', [App\Http\Controllers\SuperAdmin\SettingsController::class, 'profileIndex'])->name('settings.profile');
    Route::put('settings/profile', [App\Http\Controllers\SuperAdmin\SettingsController::class, 'profileUpdate'])->name('settings.profile.update');
    Route::get('payment-settings', [PaymentSettingsController::class, 'index'])->name('payment-settings.index');
    Route::post('payment-settings', [PaymentSettingsController::class, 'store'])->name('payment-settings.store');
});
