<?php

use App\Http\Controllers\Auth\AuthenticatedSessionController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\AttendanceController;
use App\Http\Controllers\EmployeeController;
use App\Http\Controllers\DepartmentController;
use App\Http\Controllers\DesignationController;
use App\Http\Controllers\ClientController;
use App\Http\Controllers\LocationController;
use App\Http\Controllers\ContractController;
use App\Http\Controllers\ServiceController;
use App\Http\Controllers\AssignmentController;
use App\Http\Controllers\GeofenceController;
use App\Http\Controllers\PatrolController;
use App\Http\Controllers\TransitController;
use App\Http\Controllers\ReportController;
use App\Http\Controllers\EmployeeAssignmentTransitController;
use App\Http\Controllers\LeaveController;
use App\Http\Controllers\LockerController;
use App\Http\Controllers\PaymentController;
// use App\Http\Controllers\PayrollController;
use App\Http\Controllers\AppointmentController;
use App\Http\Controllers\HolidayController;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Artisan;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/

Route::get('/cache-clear', function () {
    Artisan::call('optimize:clear');
    return "Cache Cleared Successfully";
});

// Redirect root to dashboard
Route::get('/', function () {
    return redirect()->route('dashboard');
});

// Authentication Routes
Route::middleware('guest')->group(function () {
    Route::get('login', [AuthenticatedSessionController::class, 'create'])->name('login');
    Route::post('login', [AuthenticatedSessionController::class, 'store'])->name('login.store');
});

Route::middleware('auth')->group(function () {
    Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])->name('logout');
    
    // Dashboard Routes
    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
    Route::get('/admin/dashboard', [DashboardController::class, 'admin'])->name('admin.dashboard');
    Route::get('/employee/dashboard', [DashboardController::class, 'employee'])->name('employee.dashboard');
    
    // Attendance Management Routes
    Route::prefix('attendance')->name('attendance.')->group(function () {
        Route::get('/', [AttendanceController::class, 'index'])->name('index');
        Route::get('/create', [AttendanceController::class, 'create'])->name('create');
        Route::post('/', [AttendanceController::class, 'store'])->name('store');
        Route::get('/daily-logs', [AttendanceController::class, 'dailyLogs'])->name('daily-logs');
        Route::get('/details', [AttendanceController::class, 'details'])->name('details');
        Route::get('/requests', [AttendanceController::class, 'requests'])->name('requests');
        Route::get('/import', [AttendanceController::class, 'showImportForm'])->name('import');
        Route::post('/import', [AttendanceController::class, 'import'])->name('import.store');
        Route::get('/export', [AttendanceController::class, 'export'])->name('export');
        
        // CRUD API Routes
        Route::get('/{attendance}', [AttendanceController::class, 'show'])->name('show');
        Route::get('/{attendance}/edit', [AttendanceController::class, 'edit'])->name('edit');
        Route::put('/{attendance}', [AttendanceController::class, 'update'])->name('update');
        Route::delete('/{attendance}', [AttendanceController::class, 'destroy'])->name('destroy');
        
        // API Routes for AJAX
        Route::post('/punch-in', [AttendanceController::class, 'punchIn'])->name('punch-in');
        Route::post('/punch-out', [AttendanceController::class, 'punchOut'])->name('punch-out');
        Route::get('/check-punch-status', [AttendanceController::class, 'checkPunchStatus'])->name('check-status');
        Route::post('/validate-location', [AttendanceController::class, 'validateLocation'])->name('validate-location');
    });
    
    // Employee Management Routes
    Route::prefix('employees')->name('employees.')->group(function () {
        Route::get('/', [EmployeeController::class, 'index'])->name('index');
        Route::get('/create', [EmployeeController::class, 'create'])->name('create');
        Route::post('/', [EmployeeController::class, 'store'])->name('store');
        Route::get('/{employee}', [EmployeeController::class, 'show'])->name('show');
        Route::get('/{employee}/edit', [EmployeeController::class, 'edit'])->name('edit');
        Route::put('/{employee}', [EmployeeController::class, 'update'])->name('update');
        Route::delete('/{employee}', [EmployeeController::class, 'destroy'])->name('destroy');
        Route::get('/{employee}/profile', function () {
            return view('employees.profile');
        })->name('profile');
        Route::get('/import', [EmployeeController::class, 'showImportForm'])->name('import');
        Route::post('/import', [EmployeeController::class, 'import'])->name('import.store');
        Route::get('/export', [EmployeeController::class, 'export'])->name('export');
    });
    
    // Payroll Management Routes
    Route::prefix('payroll')->name('payroll.')->group(function () {
        // Route::get('/', [PayrollController::class, 'index'])->name('index');
        // Route::get('/create', [PayrollController::class, 'create'])->name('create');
        // Route::post('/', [PayrollController::class, 'store'])->name('store');
        // Route::get('/{salary}', [PayrollController::class, 'show'])->name('show');
        // Route::get('/{salary}/edit', [PayrollController::class, 'edit'])->name('edit');
        // Route::put('/{salary}', [PayrollController::class, 'update'])->name('update');
        // Route::delete('/{salary}', [PayrollController::class, 'destroy'])->name('destroy');
        // Route::get('/reports', [PayrollController::class, 'reports'])->name('reports');
        // Route::post('/bulk-process', [PayrollController::class, 'bulkProcess'])->name('bulk.process');
    });
    
    
    // Department Routes
    Route::prefix('departments')->name('departments.')->group(function () {
        Route::get('/', [DepartmentController::class, 'index'])->name('index');
        Route::get('/create', [DepartmentController::class, 'create'])->name('create');
        Route::post('/', [DepartmentController::class, 'store'])->name('store');
        Route::get('/{department}', [DepartmentController::class, 'show'])->name('show');
        Route::get('/{department}/edit', [DepartmentController::class, 'edit'])->name('edit');
        Route::put('/{department}', [DepartmentController::class, 'update'])->name('update');
        Route::delete('/{department}', [DepartmentController::class, 'destroy'])->name('destroy');
        Route::post('/{department}/assign-users', [DepartmentController::class, 'assignUsers'])->name('assign-users');
    });
    
    // Designation Routes
    Route::prefix('designations')->name('designations.')->group(function () {
        Route::get('/', [DesignationController::class, 'index'])->name('index');
        Route::get('/create', [DesignationController::class, 'create'])->name('create');
        Route::post('/', [DesignationController::class, 'store'])->name('store');
        Route::get('/{designation}', [DesignationController::class, 'show'])->name('show');
        Route::get('/{designation}/edit', [DesignationController::class, 'edit'])->name('edit');
        Route::put('/{designation}', [DesignationController::class, 'update'])->name('update');
        Route::delete('/{designation}', [DesignationController::class, 'destroy'])->name('destroy');
        Route::post('/{designation}/assign-users', [DesignationController::class, 'assignUsers'])->name('assign-users');
    });

    // Customers Management Routes
    Route::prefix('customer')->name('customers.')->group(function () {
        Route::get('/', [ClientController::class, 'index'])->name('index');
        Route::get('/create', [ClientController::class, 'create'])->name('create');
        Route::post('/', [ClientController::class, 'store'])->name('store');
        Route::get('/locations', [ClientController::class, 'locations'])->name('locations');
        Route::get('/contracts', [ClientController::class, 'contracts'])->name('contracts');
        Route::get('/{customer}/contacts', [ClientController::class, 'contacts'])->name('contacts');
        Route::post('/{customer}/contacts', [ClientController::class, 'storeContact'])->name('contacts.store');
        Route::get('/contacts/{contact}', [ClientController::class, 'showContact'])->name('contacts.show');
        Route::put('/contacts/{contact}', [ClientController::class, 'updateContact'])->name('contacts.update');
        Route::delete('/contacts/{contact}', [ClientController::class, 'destroyContact'])->name('contacts.destroy');
        Route::get('/{customer}', [ClientController::class, 'show'])->name('show');
        Route::get('/{customer}/edit', [ClientController::class, 'edit'])->name('edit');
        Route::put('/{customer}', [ClientController::class, 'update'])->name('update');
        Route::delete('/{customer}', [ClientController::class, 'destroy'])->name('destroy');
        Route::get('/export', [ClientController::class, 'export'])->name('export');
        Route::get('/{client}/members', [ClientController::class, 'members'])->name('members');
        Route::post('/{client}/members', [ClientController::class, 'storeMember'])->name('members.store');
        Route::get('/members/search', [ClientController::class, 'searchMembers'])->name('members.search');
        Route::get('/members/{member}', [ClientController::class, 'showMember'])->name('members.show');
        Route::put('/members/{member}', [ClientController::class, 'updateMember'])->name('members.update');
        Route::post('/members/{member}/verify-finger', [ClientController::class, 'verifyFinger'])->name('members.verify-finger');
        Route::post('/members/{member}/verify-face', [ClientController::class, 'verifyFace'])->whereNumber('member')->name('members.verify-face');
        Route::post('/members/{member}/store-face', [ClientController::class, 'storeFace'])->name('members.store-face');
        Route::delete('/members/{member}', [ClientController::class, 'destroyMember'])->name('members.destroy');
        Route::post('/{client}/update-auth-count', [ClientController::class, 'updateAuthCount'])->name('update-auth-count');

        // Payment routes
        Route::get('/{client}/payment', [PaymentController::class, 'index'])->name('payment');
        Route::post('/{client}/payment/process', [PaymentController::class, 'processPayment'])->name('payment.process');
        Route::get('/{client}/payments/pending', [PaymentController::class, 'getPendingPayments'])->name('payments.pending');
        Route::post('/{client}/payments/create', [PaymentController::class, 'createPendingPayment'])->name('payments.create');
    });
    
    // Client Management Routes
    Route::prefix('clients')->name('clients.')->group(function () {
        Route::get('/', [ClientController::class, 'index'])->name('index');
        Route::get('/create', [ClientController::class, 'create'])->name('create');
        Route::post('/', [ClientController::class, 'store'])->name('store');
        Route::get('/locations', [ClientController::class, 'locations'])->name('locations');
        Route::get('/contracts', [ClientController::class, 'contracts'])->name('contracts');
        Route::get('/{client}/contacts', [ClientController::class, 'contacts'])->name('contacts');
        Route::post('/{client}/contacts', [ClientController::class, 'storeContact'])->name('contacts.store');
        Route::get('/contacts/{contact}', [ClientController::class, 'showContact'])->name('contacts.show');
        Route::put('/contacts/{contact}', [ClientController::class, 'updateContact'])->name('contacts.update');
        Route::delete('/contacts/{contact}', [ClientController::class, 'destroyContact'])->name('contacts.destroy');
        Route::get('/{client}', [ClientController::class, 'show'])->name('show');
        Route::get('/{client}/edit', [ClientController::class, 'edit'])->name('edit');
        Route::put('/{client}', [ClientController::class, 'update'])->name('update');
        Route::delete('/{client}', [ClientController::class, 'destroy'])->name('destroy');
        Route::get('/export', [ClientController::class, 'export'])->name('export');
        Route::get('/lockers/available', [ClientController::class, 'getAvailableLockers'])->name('lockers.available');
    });
    
     // Holiday Managment Route
    Route::prefix('holidays')->name('holidays.')->group(function () {
        Route::get('/', [HolidayController::class, 'index'])->name('index');
        Route::get('/create', [HolidayController::class, 'create'])->name('create');
        Route::post('/', [HolidayController::class, 'store'])->name('store');
        // Route::get('/{holiday}', [HolidayController::class, 'show'])->name('show');
        // Route::get('/{holiday}/edit', [HolidayController::class, 'edit'])->name('edit');
        Route::put('/{holiday}', [HolidayController::class, 'update'])->name('update');
        Route::delete('/{holiday}', [HolidayController::class, 'destroy'])->name('destroy');
    });
    
    // Location Management Routes
    Route::prefix('locations')->name('locations.')->group(function () {
        Route::get('/', [LocationController::class, 'index'])->name('index');
        Route::get('/create', [LocationController::class, 'create'])->name('create');
        Route::post('/', [LocationController::class, 'store'])->name('store');
        Route::get('/{location}', [LocationController::class, 'show'])->name('show');
        Route::get('/{location}/edit', [LocationController::class, 'edit'])->name('edit');
        Route::put('/{location}', [LocationController::class, 'update'])->name('update');
        Route::delete('/{location}', [LocationController::class, 'destroy'])->name('destroy');
        Route::get('/get-states/{country_id}', [LocationController::class, 'getStates'])->name('get-states');
        Route::get('/get-cities/{state_id}', [LocationController::class, 'getCities'])->name('get-cities');
    });
    
    // Contract Management Routes
    Route::prefix('contracts')->name('contracts.')->group(function () {
        Route::get('/', [ContractController::class, 'index'])->name('index');
        Route::get('/create', [ContractController::class, 'create'])->name('create');
        Route::post('/', [ContractController::class, 'store'])->name('store');
        Route::get('/{contract}', [ContractController::class, 'show'])->name('show');
        Route::get('/{contract}/edit', [ContractController::class, 'edit'])->name('edit');
        Route::put('/{contract}', [ContractController::class, 'update'])->name('update');
        Route::delete('/{contract}', [ContractController::class, 'destroy'])->name('destroy');
    });
    
    
     // Lockers Management Routes
    Route::prefix('lockers')->name('lockers.')->group(function () {
        Route::get('/', [LockerController::class, 'index'])->name('index');
        Route::get('/available', [LockerController::class, 'available'])->name('available');
        Route::get('/create', [LockerController::class, 'create'])->name('create');
        Route::post('/', [LockerController::class, 'store'])->name('store');
        Route::get('/{locker}', [LockerController::class, 'show'])->name('show');
        Route::get('/{locker}/edit', [LockerController::class, 'edit'])->name('edit');
        Route::put('/{locker}', [LockerController::class, 'update'])->name('update');
        Route::delete('/{locker}', [LockerController::class, 'destroy'])->name('destroy');
        
        // Assignment routes
        Route::post('/{locker}/assign', [LockerController::class, 'assign'])->name('assign');
        Route::post('/{locker}/release', [LockerController::class, 'release'])->name('release');
        
        
        // API routes
        Route::get('/api/search', [LockerController::class, 'apiSearch'])->name('api.search');
        Route::get('/api/next-number', [LockerController::class, 'getNextNumber'])->name('api.next-number');
        Route::get('/api/group/{groupId}/lockers', [LockerController::class, 'getLockersByGroup'])->name('api.group.lockers');
        Route::get('/api/group/{groupId}/available-lockers', [LockerController::class, 'getAvailableLockersByGroup'])->name('api.group.available-lockers');


    });
    
      // Services Management Routes (Universal Service Management)
    Route::prefix('services')->name('services.')->group(function () {
        Route::get('/', [ServiceController::class, 'index'])->name('index');
        Route::get('/create', [ServiceController::class, 'create'])->name('create');
        Route::post('/', [ServiceController::class, 'store'])->name('store');
        Route::get('/{service}', [ServiceController::class, 'show'])->name('show');
        Route::get('/{service}/edit', [ServiceController::class, 'edit'])->name('edit');
        Route::put('/{service}', [ServiceController::class, 'update'])->name('update');
        Route::delete('/{service}', [ServiceController::class, 'destroy'])->name('destroy');
    });
    
    // Assignment Management Routes
    Route::prefix('assignments')->name('assignments.')->group(function () {
        Route::get('/', [AssignmentController::class, 'index'])->name('index');
        Route::get('/{assignment}/edit', [AssignmentController::class, 'edit'])->name('edit');
        Route::put('/{assignment}', [AssignmentController::class, 'update'])->name('update');
        Route::delete('/{assignment}', [AssignmentController::class, 'destroy'])->name('destroy');
    });
    
    // Patrol Management Routes
    Route::prefix('patrols')->name('patrols.')->group(function () {
        // AJAX: Get checkpoints for a service
        Route::get('/services/{serviceId}/checkpoints', [App\Http\Controllers\PatrolController::class, 'getCheckpointsByService']);

        // Client Services
        Route::get('/services', [PatrolController::class, 'services'])->name('services');
        Route::get('/services/create', [PatrolController::class, 'createService'])->name('services.create');
        Route::post('/services', [PatrolController::class, 'storeService'])->name('services.store');
        Route::get('/services/{service}', [PatrolController::class, 'showService'])->name('services.show');
        Route::get('/services/{service}/edit', [PatrolController::class, 'editService'])->name('services.edit');
        Route::put('/services/{service}', [PatrolController::class, 'updateService'])->name('services.update');
        Route::delete('/services/{service}', [PatrolController::class, 'destroyService'])->name('services.destroy');
        
        // API endpoint for getting locations by client
        Route::get('/api/client/{clientId}/locations', [PatrolController::class, 'getLocationsByClient'])->name('api.client-locations');
        
        // API endpoint for getting checkpoints by service
        Route::get('/api/service/{serviceId}/checkpoints', [PatrolController::class, 'getCheckpointsByService'])->name('api.service-checkpoints');
        
          
        // API endpoints for employee assignment
        Route::get('/api/employees', [PatrolController::class, 'getEmployees'])->name('api.employees');
        Route::get('/api/service/{serviceId}/assignments', [PatrolController::class, 'getServiceAssignments'])->name('api.service-assignments');
      
        
        // Patrol Schedules
        Route::get('/schedules', [PatrolController::class, 'schedules'])->name('schedules');
        Route::get('/schedules/create', [PatrolController::class, 'createSchedule'])->name('schedules.create');
        Route::post('/schedules', [PatrolController::class, 'storeSchedule'])->name('schedules.store');
        Route::get('/schedules/{schedule}', [PatrolController::class, 'showSchedule'])->name('schedules.show');
        Route::get('/schedules/{schedule}/edit', [PatrolController::class, 'editSchedule'])->name('schedules.edit');
        Route::put('/{schedule}', [PatrolController::class, 'updateSchedule'])->name('schedules.update');
        Route::delete('/{schedule}', [PatrolController::class, 'destroySchedule'])->name('schedules.destroy');
        Route::post('/schedules/{schedule}/start', [PatrolController::class, 'startPatrol'])->name('schedules.start');
        
        // Checkpoints
        Route::get('/checkpoints', [PatrolController::class, 'checkpoints'])->name('checkpoints');
        Route::get('/checkpoints/create', [PatrolController::class, 'createCheckpoint'])->name('checkpoints.create');
        Route::post('/checkpoints', [PatrolController::class, 'storeCheckpoint'])->name('checkpoints.store');
        Route::get('/checkpoints/{checkpoint}', [PatrolController::class, 'showCheckpoint'])->name('checkpoints.show');
        Route::get('/checkpoints/{checkpoint}/edit', [PatrolController::class, 'editCheckpoint'])->name('checkpoints.edit');
        Route::put('/checkpoints/{checkpoint}', [PatrolController::class, 'updateCheckpoint'])->name('checkpoints.update');
        Route::delete('/checkpoints/{checkpoint}', [PatrolController::class, 'destroyCheckpoint'])->name('checkpoints.destroy');
        Route::post('/checkpoints/{checkpoint}/qr-code', [PatrolController::class, 'generateQRCode'])->name('checkpoints.generate-qr');
        
        // QR Codes
        Route::get('/qr-codes', [PatrolController::class, 'qrCodes'])->name('qr-codes');
        Route::get('/qr-codes/create', [PatrolController::class, 'createQRCode'])->name('qr-codes.create');
        Route::get('/qr-codes/service/{serviceId}/checkpoints', [PatrolController::class, 'getCheckpointsByService'])->name('qr-codes.get-checkpoints');
        Route::post('/qr-codes', [PatrolController::class, 'storeQRCode'])->name('qr-codes.store');
        Route::get('/qr-codes/{qrCode}', [PatrolController::class, 'showQRCode'])->name('qr-codes.show');
        Route::get('/qr-codes/{qrCode}/edit', [PatrolController::class, 'editQRCode'])->name('qr-codes.edit');
        Route::put('/qr-codes/{qrCode}', [PatrolController::class, 'updateQRCode'])->name('qr-codes.update');
        Route::post('/qr-codes/{qrCode}/regenerate', [PatrolController::class, 'regenerateQRCode'])->name('qr-codes.regenerate');
        Route::delete('/qr-codes/{qrCode}', [PatrolController::class, 'destroyQRCode'])->name('qr-codes.destroy');
        
        // Patrol Logs
        Route::get('/logs', [PatrolController::class, 'logs'])->name('logs');
        Route::get('/logs/{log}', [PatrolController::class, 'showLog'])->name('logs.show');
        
        // Violations
        Route::get('/violations', [PatrolController::class, 'violations'])->name('violations');
        Route::get('/violations/{violation}', [PatrolController::class, 'showViolation'])->name('violations.show');
        Route::post('/violations/{violation}/resolve', [PatrolController::class, 'resolveViolation'])->name('violations.resolve');
        
        // Patrol Reports
        Route::get('/reports', [PatrolController::class, 'reports'])->name('reports');
        Route::post('/reports', [PatrolController::class, 'generateReport'])->name('reports.generate');
        Route::get('/reports/{report}', [PatrolController::class, 'showReport'])->name('reports.show');
        Route::post('/reports/{report}/check', [PatrolController::class, 'checkReport'])->name('reports.check');
        Route::post('/reports/{report}/approve', [PatrolController::class, 'approveReport'])->name('reports.approve');
        Route::post('/reports/{report}/reject', [PatrolController::class, 'rejectReport'])->name('reports.reject');
        Route::get('/reports/{report}/export/pdf', [PatrolController::class, 'exportReportPDF'])->name('reports.export.pdf');
        Route::get('/reports/{report}/export/excel', [PatrolController::class, 'exportReportExcel'])->name('reports.export.excel');
    });
    
    // Geofencing Routes
    Route::prefix('geofences')->name('geofences.')->group(function () {
        Route::get('/', [GeofenceController::class, 'index'])->name('index');
        Route::get('/create', [GeofenceController::class, 'create'])->name('create');
        Route::post('/', [GeofenceController::class, 'store'])->name('store');
        Route::get('/export', [GeofenceController::class, 'export'])->name('export');
        
        // Specific routes must come before parameterized routes
        Route::get('/violations', [GeofenceController::class, 'violations'])->name('violations');
        Route::get('/monitoring', [GeofenceController::class, 'monitoring'])->name('monitoring');
        
        // Parameterized routes
        Route::get('/{geofence}', [GeofenceController::class, 'show'])->name('show');
        Route::get('/{geofence}/edit', [GeofenceController::class, 'edit'])->name('edit');
        Route::put('/{geofence}', [GeofenceController::class, 'update'])->name('update');
        Route::delete('/{geofence}', [GeofenceController::class, 'destroy'])->name('destroy');
        
        // API Routes for AJAX
        Route::get('/violations/{violation}', [GeofenceController::class, 'showViolation']);
        Route::post('/violations/{violation}/resolve', [GeofenceController::class, 'resolveViolation']);
        Route::get('/violations/export', [GeofenceController::class, 'exportViolations']);
        
        // Real-time monitoring API
        Route::post('/location/update', [GeofenceController::class, 'updateLocation'])->name('location.update');
        Route::post('/user-status', [GeofenceController::class, 'getUserStatus'])->name('user.status');
        Route::get('/stats', [GeofenceController::class, 'getStats'])->name('stats');
        Route::post('/nearby', [GeofenceController::class, 'getNearby'])->name('nearby');
        Route::post('/test-point', [GeofenceController::class, 'testPoint'])->name('test.point');
    });
    
    // Transit Tracking Routes
    Route::prefix('transit')->name('transit.')->group(function () {
        Route::get('/', [TransitController::class, 'index'])->name('index');
        Route::get('/create', [EmployeeAssignmentTransitController::class, 'create'])->name('create');
        Route::get('/history', [TransitController::class, 'history'])->name('history');
        Route::get('/history/export', [TransitController::class, 'exportHistory'])->name('history.export');
        Route::get('/{transit}', [TransitController::class, 'show'])->name('show');
        Route::post('/{transit}/status', [TransitController::class, 'updateStatus'])->name('update.status');
        Route::get('/{transit}/track', [TransitController::class, 'track'])->name('track');
    });
    
    // Employee Assignment Transit Routes
    Route::prefix('employee-assignment-transits')->name('employee-assignment-transits.')->group(function () {
        Route::get('/', [EmployeeAssignmentTransitController::class, 'index'])->name('index');
        Route::get('/create', [EmployeeAssignmentTransitController::class, 'create'])->name('create');
        Route::post('/', [EmployeeAssignmentTransitController::class, 'store'])->name('store');
        Route::get('/{transit}', [EmployeeAssignmentTransitController::class, 'show'])->name('show');
        Route::post('/{transit}/approve', [EmployeeAssignmentTransitController::class, 'approve'])->name('approve');
        Route::post('/{transit}/reject', [EmployeeAssignmentTransitController::class, 'reject'])->name('reject');
        Route::post('/{transit}/complete', [EmployeeAssignmentTransitController::class, 'complete'])->name('complete');
        Route::post('/{transit}/start', [EmployeeAssignmentTransitController::class, 'startTransit'])->name('start');
        Route::post('/{transit}/end', [EmployeeAssignmentTransitController::class, 'endTransit'])->name('end');
        Route::post('/{transit}/location', [EmployeeAssignmentTransitController::class, 'updateTransitLocation'])->name('location');
        Route::get('/{transit}/status', [EmployeeAssignmentTransitController::class, 'getTransitStatus'])->name('status');
        Route::delete('/{transit}', [EmployeeAssignmentTransitController::class, 'destroy'])->name('destroy');
        
        // API Routes for AJAX
        Route::get('/get-employee-assignments/{employeeId}', [EmployeeAssignmentTransitController::class, 'getEmployeeAssignments']);
        Route::get('/get-available-services/{fromAssignmentId}', [EmployeeAssignmentTransitController::class, 'getAvailableServices']);
    });

    
    
    // Leave Management Routes
    Route::prefix('leave')->name('leave.')->group(function () {
        Route::get('/', [LeaveController::class, 'index'])->name('index');
        Route::get('/calendar', [LeaveController::class, 'calendar'])->name('calendar');
        Route::get('/balance', [LeaveController::class, 'balance'])->name('balance');
        Route::get('/export', [LeaveController::class, 'export'])->name('export');
        Route::get('/{leave}', [LeaveController::class, 'show'])->name('show');
        Route::post('/{leave}/approve', [LeaveController::class, 'approve'])->name('approve');
        Route::post('/{leave}/reject', [LeaveController::class, 'reject'])->name('reject');
        Route::delete('/{leave}', [LeaveController::class, 'destroy'])->name('destroy');
    });
    
    // Appointments Management Routes
    Route::prefix('appointments')->name('appointments.')->group(function () {
        Route::get('/', [AppointmentController::class, 'index'])->name('index');
        Route::get('/today', [AppointmentController::class, 'today'])->name('today');
        Route::get('/pending', [AppointmentController::class, 'pending'])->name('pending');
        Route::get('/confirmed', [AppointmentController::class, 'confirmed'])->name('confirmed');
        Route::get('/completed', [AppointmentController::class, 'completed'])->name('completed');
        Route::get('/cancelled', [AppointmentController::class, 'cancelled'])->name('cancelled');
        Route::get('/create', [AppointmentController::class, 'create'])->name('create');
        Route::post('/', [AppointmentController::class, 'store'])->name('store');
        Route::get('/{appointment}', [AppointmentController::class, 'show'])->name('show');
        Route::get('/{appointment}/edit', [AppointmentController::class, 'edit'])->name('edit');
        Route::put('/{appointment}', [AppointmentController::class, 'update'])->name('update');
        Route::delete('/{appointment}', [AppointmentController::class, 'destroy'])->name('destroy');
        
        // Status update routes
        Route::post('/{appointment}/confirm', [AppointmentController::class, 'confirm'])->name('confirm');
        Route::post('/{appointment}/complete', [AppointmentController::class, 'complete'])->name('complete');
        Route::post('/{appointment}/cancel', [AppointmentController::class, 'cancel'])->name('cancel');
        
        // API routes for AJAX
        Route::get('/api/get-clients', [AppointmentController::class, 'getClients'])->name('api.clients');
        Route::get('/api/get-customer-members/{clientId}', [AppointmentController::class, 'getCustomerMembers'])->name('api.customer-members');
    });
    
    // Advanced Reports Routes
    Route::prefix('reports')->name('reports.')->group(function () {
        // Lockers Routes
        Route::get('/lockers', [ReportController::class, 'lockers'])->name('lockers');
        Route::get('/lockers/report', [ReportController::class, 'lockersReport'])->name('lockers.report');
        Route::get('/lockers/export', [ReportController::class, 'exportLockers'])->name('lockers.export');
        Route::get('/lockers/export-pdf', [ReportController::class, 'exportLockersPDF'])->name('lockers.export-pdf');
        Route::get('/lockers/export-txt', [ReportController::class, 'exportLockersTXT'])->name('lockers.export-txt');
        Route::get('/lockers/expiry', [ReportController::class, 'lockerExpiry'])->name('lockers.expiry');
        Route::get('/lockers/expiry/export', [ReportController::class, 'exportLockerExpiry'])->name('lockers.expiry.export');
        Route::get('/lockers/expiry/export-txt', [ReportController::class, 'exportLockerExpiryTXT'])->name('lockers.expiry.export-txt');

        // Appointments Routes
        Route::get('/appointments', [ReportController::class, 'appointments'])->name('appointments');
        Route::get('/appointments/report', [ReportController::class, 'appointmentsReport'])->name('appointments.report');
        Route::get('/appointments/export', [ReportController::class, 'exportAppointments'])->name('appointments.export');
        Route::get('/appointments/export-pdf', [ReportController::class, 'exportAppointmentsPDF'])->name('appointments.export-pdf');
        Route::get('/appointments/export-txt', [ReportController::class, 'exportAppointmentsTXT'])->name('appointments.export-txt');
        Route::get('/appointments/export-xls', [ReportController::class, 'exportAppointmentsXLS'])->name('appointments.export-xls');
        Route::get('/appointments/export-xlsx', [ReportController::class, 'exportAppointmentsXLSX'])->name('appointments.export-xlsx');
        
        // Income Routes
        Route::get('/income', [ReportController::class, 'income'])->name('income');
        Route::get('/income/report', [ReportController::class, 'incomeReport'])->name('income.report');
        Route::get('/income/export-txt', [ReportController::class, 'exportIncomeTXT'])->name('income.export-txt');
        Route::get('/income/export-xls', [ReportController::class, 'exportIncomeXLS'])->name('income.export-xls');
        
        // Main dashboard
        Route::get('/', [ReportController::class, 'index'])->name('index');
        Route::get('/analytics', [ReportController::class, 'analytics'])->name('analytics');

        // Detailed reports
        Route::get('/attendance', [ReportController::class, 'attendance'])->name('attendance');
        Route::get('/transit', [ReportController::class, 'transit'])->name('transit');
        Route::get('/geofence', [ReportController::class, 'geofence'])->name('geofence');
        Route::get('/patrol', [ReportController::class, 'patrol'])->name('patrol');

        // Performance reports
        Route::get('/employee-performance', [ReportController::class, 'employeePerformance'])->name('employee-performance');
        Route::get('/client-performance', [ReportController::class, 'clientPerformance'])->name('client-performance');

        // Export functionality
        Route::get('/attendance/export', [ReportController::class, 'exportAttendance'])->name('attendance.export');
        Route::get('/transit/export', [ReportController::class, 'exportTransit'])->name('transit.export');
        Route::get('/geofence/export', [ReportController::class, 'exportGeofence'])->name('geofence.export');

        // API endpoints for real-time data
        Route::get('/dashboard-data', [ReportController::class, 'dashboardData'])->name('dashboard-data');
        Route::get('/chart-data', [ReportController::class, 'chartData'])->name('chart-data');
    });
    
    
    // Advanced Reports Routes
    Route::prefix('reports')->name('reports.')->group(function () {
        // Main dashboard
        Route::get('/', [ReportController::class, 'index'])->name('index');
        Route::get('/analytics', [ReportController::class, 'analytics'])->name('analytics');
        
        // Detailed reports
        Route::get('/attendance', [ReportController::class, 'attendance'])->name('attendance');
        Route::get('/transit', [ReportController::class, 'transit'])->name('transit');
        Route::get('/geofence', [ReportController::class, 'geofence'])->name('geofence');
        Route::get('/patrol', [ReportController::class, 'patrol'])->name('patrol');
        
        // Performance reports
        Route::get('/employee-performance', [ReportController::class, 'employeePerformance'])->name('employee-performance');
        Route::get('/client-performance', [ReportController::class, 'clientPerformance'])->name('client-performance');
        
        // Export functionality
        Route::get('/attendance/export', [ReportController::class, 'exportAttendance'])->name('attendance.export');
        Route::get('/transit/export', [ReportController::class, 'exportTransit'])->name('transit.export');
        Route::get('/geofence/export', [ReportController::class, 'exportGeofence'])->name('geofence.export');
        
        // API endpoints for real-time data
        Route::get('/dashboard-data', [ReportController::class, 'dashboardData'])->name('dashboard-data');
        Route::get('/chart-data', [ReportController::class, 'chartData'])->name('chart-data');
    });
    
    // Settings Routes
    Route::prefix('settings')->name('settings.')->group(function () {
        Route::get('/', function () {
            return view('settings.general');
        })->name('index');
        
        Route::get('/general', function () {
            return view('settings.general');
        })->name('general');
        
        Route::get('/attendance', function () {
            return view('settings.attendance');
        })->name('attendance');
        
        Route::get('/patrol', function () {
            return view('settings.patrol');
        })->name('patrol');
        
        Route::get('/geofence', function () {
            return view('settings.geofence');
        })->name('geofence');
    });
    
    // Profile Routes
    Route::prefix('profile')->name('profile.')->group(function () {
        Route::get('/', function () {
            return view('profile.show');
        })->name('show');
        
        Route::get('/edit', function () {
            return view('profile.edit');
        })->name('edit');
    });
    
    // Notifications Routes
    Route::prefix('notifications')->name('notifications.')->group(function () {
        Route::get('/', function () {
            return view('notifications.index');
        })->name('index');
    });
    
    // Activities Routes
    Route::prefix('activities')->name('activities.')->group(function () {
        Route::get('/', function () {
            return view('activities.index');
        })->name('index');
    });
    
    // Calendar Routes
    Route::prefix('calendar')->name('calendar.')->group(function () {
        Route::get('/', function () {
            return view('calendar.index');
        })->name('index');
    });
});
Route::get('/env-check', function () {
    return [
        'env' => app()->environment(),
        'db_user' => env('DB_USERNAME'),
        'db_pass' => env('DB_PASSWORD') ? 'SET' : 'EMPTY',
    ];
});

// Debug route - REMOVE AFTER USE
Route::get('/debug', function () {
    return [
        'php_version' => PHP_VERSION,
        'mbstring_loaded' => extension_loaded('mbstring'),
        'mbstring_functions' => function_exists('mb_split') ? 'Available' : 'Not Available',
        'laravel_version' => app()->version(),
        'environment' => app()->environment(),
    ];
});

// Temporary cache clear route - REMOVE AFTER USE
Route::get('/clear-cache', function () {
    // Artisan::call('config:clear');
    // Artisan::call('cache:clear');
    // Artisan::call('view:clear');
    // Artisan::call('route:clear');
    // return 'Cache cleared successfully!';
});

// Fallback route for undefined routes
Route::fallback(function () {
    return response()->view('errors.404', [], 404);
});
