<?php

use App\Http\Controllers\Attendance\StaffAttendanceController;
use App\Http\Controllers\OperationalSetupController;
use App\Http\Controllers\Reports\AttendanceController;
use App\Http\Controllers\Reports\ShiftController;
use Inertia\Inertia;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Application;
use App\Http\Controllers\KpiController;
use App\Http\Controllers\GoalController;
use App\Http\Controllers\LeaveController;
use App\Http\Controllers\PagesController;
use App\Http\Controllers\ReviewController;
use App\Http\Controllers\SchemaController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\SnwolleyController;
use App\Http\Controllers\StaffApiController;
use App\Http\Controllers\TrainingController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\TimeTrackerController;
use App\Http\Controllers\NotificationsController;
use App\Http\Controllers\Comms\HelpDeskController;
use App\Http\Controllers\Comms\HolidaysController;
use App\Http\Controllers\Requests\TravelController;
use App\Http\Controllers\Training\CourseController;
use App\Http\Controllers\Comms\AnniversaryController;
use App\Http\Controllers\Comms\AnnouncementController;
use App\Http\Controllers\Interview\InterviewController;
use App\Http\Controllers\Onboarding\OnboardingController;
use App\Http\Controllers\Schemas\DynamicSchemaController;
use App\Http\Controllers\Requests\StaffMovementController;
use App\Http\Controllers\Requests\TravelRequestController;
use App\Http\Controllers\Training\CertificationController;
use App\Http\Controllers\OffBoarding\OffBoardingController;
use App\Http\Controllers\Requests\VehicleRequestController;
use App\Http\Controllers\Resources\CustomResourceController;
use App\Http\Controllers\Resources\TenantResourceController;
use App\Http\Controllers\Resources\CentralResourceController;
use App\Http\Controllers\Schemas\DynamicSchemaDataController;
use App\Http\Controllers\Training\LearningManagementController;
use App\Http\Controllers\OrganisationController;
use App\Http\Controllers\HelpDesk\SendConversationMessageController;

//resources
Route::prefix('resources')->group(function () {
    Route::get('/central/available', [CentralResourceController::class, 'getAvailableResource'])->name('get-available-central-resources');
    Route::get('/central', [CentralResourceController::class, 'index']);
    Route::get('/tenant/available', [TenantResourceController::class, 'getAvailableResource'])->name('get-available-tenant-resources');
    Route::get('/tenant', [TenantResourceController::class, 'index'])->name('get-tenant-resource');
    Route::get('/custom/available', [CustomResourceController::class, 'getAvailableResource'])->name('get-available-custom-resources');
    Route::get('/custom', [CustomResourceController::class, 'index'])->name('get-custom-resource');
});

//resources
Route::prefix('profile')->group(function () {
    Route::get('', [ProfileController::class, 'index'])->name('profile.index');
    Route::post('update', [ProfileController::class, 'update'])->name('profile.update');
    Route::apiSingleton('staff-api', StaffApiController::class)->creatable();
    Route::delete('delete-file/{id}', [ProfileController::class, 'deleteFile'])->name('delete.staff.file');
});


Route::prefix('')->controller(PagesController::class)->group(function () {
    Route::get('/', 'dashboard')->name('dashboard');
    Route::get('/auth-token', 'handleUserDetailsAndToken')->name('user.token');
    Route::get('leave', 'leave')->name('leave');
    Route::get('offboarding', 'offBoarding')->name('offboarding');
    Route::get('onboarding', 'onBoarding')->name('onboarding');
    Route::get('interview', 'interview')->name('interview');
    Route::get('helpdesk', 'helpDesk')->name('helpdesk');
    Route::get('staff-movements', 'staffMovement')->name('staff-movements');
    Route::get('vehicle-movements', 'vehicleMovement')->name('vehicle-movements');
    Route::get('travel', 'travel')->name('travel');
    Route::get('time-log', 'timeLog')->name('time-log');
    Route::get('time-sheet', 'timeSheet')->name('time-sheet');
    Route::get('kpi', 'kpi')->name('kpi');
    Route::get('kpi-review', 'kpi_review')->name('kpi-review');
    Route::get('kpi-grading', 'kpi_grading')->name('kpi-grading');
    Route::get('kpi-data', 'kpi_data')->name('kpi-data');
    Route::get('kpi-grading-data', 'kpi_grading_data')->name('kpi-grading-data');
    Route::get('kpi-review-data', 'kpi_review_data')->name('kpi-review-data');
    Route::get('goal-review', 'goal_review')->name('goal-review.index');
    Route::get('goal-assignement-review', 'goal_assignment_review')->name('goal-assignment-review');
    Route::get('goal', 'staffGoal')->name('goal.index');
    Route::get('courses', 'courses')->name('courses');
    Route::get('enrolled-courses', 'enrolledCourses')->name('enrolled-courses');
    Route::get('goal-detail', 'staffGoalDetail')->name('goal-detail');
    Route::get('announcement', 'announcement')->name('announcement');
    Route::get('holiday', 'holiday')->name('holiday');
    Route::get('anniversary', 'anniversary')->name('anniversary');
    Route::get('learning-area', 'learningArea')->name('learning-area');
    Route::get('attendance', 'attendance')->name('attendance');
    Route::get('shift', 'shift')->name('shift');
});

Route::prefix('interview-resource')->group(function () {
    Route::get('', [InterviewController::class, 'index'])->name('interview.index');
});

Route::resource('organisation', OrganisationController::class);
Route::get('operational', [OperationalSetupController::class, 'index'])->name('operational.index');


Route::prefix('engagement')->group(function () {
    Route::get('anniversaries/messages', [AnniversaryController::class, 'index'])->name('anniversaries.index');
    Route::get('announcement/message', [AnnouncementController::class, 'index'])->name('announcement.index');
    Route::get('holidays/message', [HolidaysController::class, 'index'])->name('holidays.index');

    Route::post('announcement', [AnnouncementController::class, 'store'])->name('announcement.comment');
    Route::post('announcement/like', [AnnouncementController::class, 'like'])->name('announcement.like');
    Route::post('announcement/unlike', [AnnouncementController::class, 'unlike'])->name('announcement.unlike');
    Route::get('comment/history', [AnnouncementController::class, 'commentHistory'])->name('comment.history');
    Route::get('isengaged/like', [AnnouncementController::class, 'isEngaged'])->name('isengaged.like');
});

Route::get('automations/review-forms/current-level/schema', [SchemaController::class, 'getApprovalSchema'])->name('automations.review-forms.current-level.schema');

Route::prefix('')->controller(DashboardController::class)->group(function () {
    Route::get('/vehicle-request-count', 'vehicleRequestCount')->name('vehicle-request-count');
    Route::get('/leave-request-count', 'leaveRequestCount')->name('leave-request-count');
    Route::get('/help-desk-request-count', 'helpdeskRequestCount')->name('help-desk-request-count');
    Route::get('/top-requests', 'topRequests')->name('top-requests');
});

//schemas
Route::prefix('schemas')->group(function () {
    Route::get('/available', [DynamicSchemaController::class, 'getAvailableSchemas'])->name('get-available-schemas');
    Route::get('/', [DynamicSchemaController::class, 'index']);
    Route::get('/multiple', [DynamicSchemaController::class, 'getMultipleSchemas'])->name('get-multiple-schemas');
    ;
    Route::apiResource('data', DynamicSchemaDataController::class);
});

Route::post('vehicle/{id}/update', [VehicleRequestController::class, 'updateVehicleMovement'])->name('vehicle.movement.update');
Route::post('review/{id}/vehicle', [VehicleRequestController::class, 'reviewVehicleMovement'])->name('vehicle.movement.review');
Route::get('schema', [SchemaController::class, 'show'])->name('schema.get');
Route::post('destroy/{id}/vehicle', [VehicleRequestController::class, 'destroyVehicleMovement'])->name('vehicle.movement.destroy');


Route::prefix('requests')->group(function () {
    Route::resource('staff_movements', StaffMovementController::class);
    Route::resource('vehicle_requests', VehicleRequestController::class)->except(['updateStatus', 'getDriverAssigned']);
    Route::prefix('vehicle')->group(function () {
        Route::post('update_status', [VehicleRequestController::class, 'updateStatus'])->name('vehicle_requests.update_status');
        Route::get('driver_assigned', [VehicleRequestController::class, 'getDriverAssigned'])->name('vehicle_requests.driver_assigned');
    });
    Route::resource('leave_resources', LeaveController::class);
    Route::resource('travel_resources', TravelController::class);
});

Route::prefix('performance')->group(function () {
    Route::resource('kpi_resources', KpiController::class);
    Route::get('/kpi-resources/form', [KpiController::class, 'getKpiForm'])->name('kpi_resources.form');
    Route::post('/kpi-resources/submit/{id}', [KpiController::class, 'submitKpiForm'])->name('kpi_resources.submit');
    Route::get('/kpi-review', [KpiController::class, 'KpiReview'])->name('kpi_review.index');
    Route::get('/kpi-grading', [KpiController::class, 'KpiGrading'])->name('kpi_grading.index');
    Route::get('/kpi-review-data/{id}/fetch', [KpiController::class, 'fetchKpiReviewData'])->name('kpi_review_data.fetch');
    Route::get('/kpi-review-data-returned/{id}/fetch', [KpiController::class, 'fetchKpiReviewDataReturned'])->name('kpi_review_data_returned.fetch');
    Route::get('/kpi-grading-data/{id}/fetch', [KpiController::class, 'fetchKpiGradingData'])->name('kpi_grading_data.fetch');
    Route::post('/kpi-review/submit', [KpiController::class, 'submitKpiReview'])->name('kpi_review_data.submit');
    Route::post('/kpi-review-returned/submit', [KpiController::class, 'submitKpiReviewReturned'])->name('kpi_review_data_returned.submit');
    Route::post('/kpi-review/sub-area/submit', [KpiController::class, 'submitSubArea'])->name('sub_area.submit');
    Route::post('/kpi-review/sub-area-returned/submit', [KpiController::class, 'submitSubAreaReturned'])->name('sub_area_returned.submit');
    Route::post('/kpi-review/sub-area/approve', [KpiController::class, 'approveSubArea'])->name('sub_area.approve');
    Route::get('/goal-review-data', [GoalController::class, 'goalReviewData'])->name('goal_review.data');
    Route::get('/goal-assignment-review/{id}/fetch', [GoalController::class, 'fetchGoalAssignmentData'])->name('goal_assignment.fetch');
    Route::post('/goal-review/submit', [GoalController::class, 'submitGoalReview'])->name('goal-review.submit');
    Route::get('/goal-data', [GoalController::class, 'goalData'])->name('goal.data');
    Route::get('/goal-detail/{id}/fetch', [GoalController::class, 'fetchGoalDetail'])->name('goal_detail.fetch');
});

//Course
Route::prefix('training')->group(function () {
    Route::resource('courses', CourseController::class);
    Route::prefix('course')->group(function () {
        Route::post('enroll', [LearningManagementController::class, 'enroll'])->name('courses.enroll');
        Route::get('get-couurse-modules', [LearningManagementController::class, 'getCourseModules'])->name('get-course-modules');
        Route::post('mark-entry-as-completed', [LearningManagementController::class, 'markEntryAsCompleted'])->name('mark-entry-as-completed');
        Route::get('get-progress', [LearningManagementController::class, 'getProgress'])->name('get-progress');
    });
    Route::get('course-data', [CourseController::class, 'courseData'])->name('courses.enrolled');
    Route::get('course-enrolment/{id}/certification', [CertificationController::class, 'show'])->name('training.certification.show');
});



Route::prefix('comms')->group(function () {
    Route::resource('help_desks', HelpDeskController::class);
    Route::post('/store-message', [HelpDeskController::class, 'storeMessage'])->name('help.desks.message');
    Route::get('/get-messages', [HelpDeskController::class, 'getMessages'])->name('help.desks.get.message');
    Route::post('/close-help-desk', [HelpDeskController::class, 'closeRequest'])->name('help.desks.close');
});

Route::get('notifications', [NotificationsController::class, 'notifications'])->name('get.notifications');
Route::patch('notifications/read', [NotificationsController::class, 'notificationsRead'])->name('read.notifications');
Route::patch('notifications/read/all', [NotificationsController::class, 'notificationsReadAll'])->name('readAll.notifications');
Route::delete('notifications/delete', [NotificationsController::class, 'destroy'])->name('delete.notifications');

Route::resource('onboarding_resources', OnboardingController::class)->except(['myOnboarding']);
Route::get('/my-onboarding', [OnboardingController::class, 'myOnboarding'])->name('my.onboarding');

Route::post('offboarding/confirm-activity', [OffboardingController::class, 'confirmActivity'])->name('offboarding.confirm-activity');
Route::get('offboarding/reviewable-activities', [OffBoardingController::class, 'getReviewableActivities'])->name('offboarding.get-reviewable-activities');


Route::resource('time_log', TimeTrackerController::class);
Route::get('time_sheet/query', [TimeTrackerController::class, 'query'])->name('time_sheet.query');

Route::resource('snwolley', SnwolleyController::class);

// Review
Route::prefix('review')->group(function () {
    Route::get('fields', [ReviewController::class, 'getFields'])->name('review.fields');
    Route::get('history', [ReviewController::class, 'history'])->name('review.history');
    Route::post('create', [ReviewController::class, 'createReview'])->name('review.create');
});

// Review
Route::prefix('attendance')->group(function () {
    Route::post('check-in', [StaffAttendanceController::class, 'checkIn'])->name('attendance.check-in');
    Route::post('check-out', [StaffAttendanceController::class, 'checkOut'])->name('attendance.check-out');
    Route::get('check-today', [StaffAttendanceController::class, 'checkToday'])->name('attendance.check-today');
});

Route::prefix('report')->group(function () {
    Route::get('attendance', [AttendanceController::class, 'index'])->name('report.attendance');
    Route::get('shift', [ShiftController::class, 'index'])->name('report.shift');
});



require __DIR__ . '/auth.php';
