<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\AdsController;
use App\Http\Controllers\ApplicantController;
use App\Http\Controllers\Admin\AuthController as AdminAuthController;
use App\Http\Controllers\Admin\JobController as AdminJobController;
use App\Http\Controllers\Admin\JobStageController as AdminJobStageController;
use App\Http\Controllers\Admin\ApplicationController as AdminApplicationController;
use App\Http\Controllers\Admin\AdController as AdminAdController;
use App\Http\Controllers\Admin\SettingController as AdminSettingController;
use App\Http\Controllers\Admin\NotificationController as AdminNotificationController;
use App\Http\Controllers\Admin\ActivityController as AdminActivityController;
use App\Http\Controllers\Admin\TestNotificationController;
use App\Http\Controllers\Admin\SendMessageController;
use App\Http\Controllers\PasswordController;

/*
|--------------------------------------------------------------------------
| Public Routes
|--------------------------------------------------------------------------
*/

// Step 1: Homepage - Listing lowongan
Route::get('/', [HomeController::class, 'index'])->name('home');

// Step 2: Detail lowongan
Route::get('/lowongan/{job}', [HomeController::class, 'show'])->name('job.show');

// Privacy Policy
Route::get('/kebijakan-privasi', function () {
    return view('privacy-policy');
})->name('privacy.policy');

// Contact
Route::get('/kontak', function () {
    return view('contact');
})->name('contact');

// Step 3 & 4: Ads countdown page
Route::get('/apply/{job}/ads', [AdsController::class, 'countdown'])->name('ads.countdown');

// Step 5: Login / Register
Route::get('/login', [ApplicantController::class, 'showLogin'])->name('login');
Route::post('/register', [ApplicantController::class, 'register'])->middleware('throttle:4,1')->name('register');
Route::post('/login', [ApplicantController::class, 'login'])->middleware('throttle:8,1')->name('login.submit');
Route::post('/logout', [ApplicantController::class, 'logout'])->name('logout');

// Forgot & Reset Password
Route::get('/lupa-password', [PasswordController::class, 'showForgotForm'])->name('password.forgot.form');
Route::post('/lupa-password', [PasswordController::class, 'sendResetLink'])->name('password.forgot');
Route::get('/reset-password', [PasswordController::class, 'showResetForm'])->name('password.reset');
Route::post('/reset-password', [PasswordController::class, 'resetPassword'])->name('password.reset.submit');

/*
|--------------------------------------------------------------------------
| Applicant Routes (requires session login)
|--------------------------------------------------------------------------
*/
Route::middleware(\App\Http\Middleware\ApplicantMiddleware::class)->group(function () {
    // Dashboard
    Route::get('/dashboard', [ApplicantController::class, 'dashboard'])->name('dashboard');

    // Change Password
    Route::get('/ubah-password', [PasswordController::class, 'showChangeForm'])->name('password.change.form');
    Route::post('/ubah-password', [PasswordController::class, 'changePassword'])->name('password.change');

    // Update Profile
    Route::get('/profil', [ApplicantController::class, 'editProfile'])->name('profile.edit');
    Route::post('/profil', [ApplicantController::class, 'updateProfile'])->name('profile.update');
    Route::get('/api/cities/{province}', [ApplicantController::class, 'getCities'])->name('api.cities');

    // Submit application (with optional CV upload)
    Route::post('/apply/{job}', [ApplicantController::class, 'submitApplication'])->name('apply.submit');

    // Dynamic stage forms (replaces old fixed stage2/stage3)
    Route::get('/form/{application}/{stage}', [ApplicantController::class, 'showStageForm'])->name('form.stage');
    Route::post('/form/{application}/{stage}', [ApplicantController::class, 'submitStageForm'])->name('form.stage.submit');
});

/*
|--------------------------------------------------------------------------
| Admin Routes
|--------------------------------------------------------------------------
*/
Route::prefix('admin')->group(function () {
    Route::get('/login', [AdminAuthController::class, 'showLogin'])->name('admin.login');
    Route::post('/login', [AdminAuthController::class, 'login'])->name('admin.login.submit');
    Route::match(['get', 'post'], '/logout', [AdminAuthController::class, 'logout'])->name('admin.logout');

    Route::middleware(\App\Http\Middleware\AdminMiddleware::class)->group(function () {
        Route::get('/', [AdminAuthController::class, 'dashboard'])->name('admin.dashboard');

        // Jobs CRUD
        Route::post('jobs/{job}/copy', [AdminJobController::class, 'copy'])->name('admin.jobs.copy');
        Route::resource('jobs', AdminJobController::class)->names('admin.jobs');

        // Job Stages (nested under jobs)
        Route::prefix('jobs/{job}/stages')->name('admin.jobs.stages.')->group(function () {
            Route::get('/', [AdminJobStageController::class, 'index'])->name('index');
            Route::get('/{stage}/edit', [AdminJobStageController::class, 'edit'])->name('edit');
            Route::put('/{stage}', [AdminJobStageController::class, 'update'])->name('update');
            Route::patch('/{stage}/toggle', [AdminJobStageController::class, 'toggle'])->name('toggle');
        });

        // Applications
        Route::get('/applications', [AdminApplicationController::class, 'index'])->name('admin.applications.index');
        Route::get('/applications/{application}', [AdminApplicationController::class, 'show'])->name('admin.applications.show');
        Route::patch('/applications/{application}/status', [AdminApplicationController::class, 'updateStatus'])->name('admin.applications.status');
        Route::post('/applications/bulk', [AdminApplicationController::class, 'bulkUpdate'])->name('admin.applications.bulk');

        // Applicants
        Route::get('/applicants', [AdminApplicationController::class, 'applicants'])->name('admin.applicants');
        Route::get('/applicants/download', [AdminApplicationController::class, 'downloadApplicants'])->name('admin.applicants.download');

        // Ads
        Route::resource('ads', AdminAdController::class)->names('admin.ads');
        Route::patch('ads/{ad}/toggle', [AdminAdController::class, 'toggle'])->name('admin.ads.toggle');

        // Notifications
        Route::get('/notifications', [AdminNotificationController::class, 'index'])->name('admin.notifications');
        Route::get('/activity-feed', [AdminActivityController::class, 'feed'])->name('admin.activity.feed');
        Route::post('/activity-feed/mark-read', [AdminActivityController::class, 'markRead'])->name('admin.activity.mark-read');
        Route::get('/notifications/queue', [AdminNotificationController::class, 'queue'])->name('admin.notifications.queue');
        Route::get('/notifications/queue/stats', [AdminNotificationController::class, 'queueStats'])->name('admin.notifications.queue-stats');
        Route::post('/notifications/{notification}/cancel', [AdminNotificationController::class, 'cancel'])->name('admin.notifications.cancel');
        Route::post('/notifications/{notification}/send-now', [AdminNotificationController::class, 'sendNow'])->name('admin.notifications.send-now');
        Route::post('/notifications/{notification}/reschedule', [AdminNotificationController::class, 'reschedule'])->name('admin.notifications.reschedule');
        Route::post('/notifications/send-all-due', [AdminNotificationController::class, 'sendAllDue'])->name('admin.notifications.send-all-due');
        Route::post('/notifications/cancel-all', [AdminNotificationController::class, 'cancelAll'])->name('admin.notifications.cancel-all');

        // Message Templates
        Route::get('/message-templates', [\App\Http\Controllers\Admin\MessageTemplateController::class, 'index'])->name('admin.message-templates.index');
        Route::get('/message-templates/{template}/edit', [\App\Http\Controllers\Admin\MessageTemplateController::class, 'edit'])->name('admin.message-templates.edit');
        Route::put('/message-templates/{template}', [\App\Http\Controllers\Admin\MessageTemplateController::class, 'update'])->name('admin.message-templates.update');
        Route::post('/message-templates/{template}/reset', [\App\Http\Controllers\Admin\MessageTemplateController::class, 'resetToDefault'])->name('admin.message-templates.reset');

        // Settings
        Route::get('/settings', [AdminSettingController::class, 'index'])->name('admin.settings');
        Route::post('/settings', [AdminSettingController::class, 'update'])->name('admin.settings.update');
        Route::post('/settings/change-password', [AdminSettingController::class, 'changePassword'])->name('admin.settings.change-password');

        // Send Message (manual email & WhatsApp)
        Route::get('/send-message', [SendMessageController::class, 'index'])->name('admin.send-message.index');
        Route::post('/send-message/email', [SendMessageController::class, 'sendEmail'])->name('admin.send-message.email');
        Route::post('/send-message/whatsapp', [SendMessageController::class, 'sendWhatsApp'])->name('admin.send-message.whatsapp');
        Route::post('/send-message/test-smtp', [SendMessageController::class, 'testSmtp'])->name('admin.send-message.test-smtp');
        Route::post('/send-message/test-fonnte', [SendMessageController::class, 'testFonnte'])->name('admin.send-message.test-fonnte');
        Route::post('/send-message/broadcast-email', [SendMessageController::class, 'broadcastEmail'])->name('admin.send-message.broadcast-email');
        Route::post('/send-message/broadcast-whatsapp', [SendMessageController::class, 'broadcastWhatsApp'])->name('admin.send-message.broadcast-whatsapp');

        // Test / Debug Notifications (legacy)
        Route::get('/test-notification', [TestNotificationController::class, 'index'])->name('admin.test.index');
        Route::post('/test-notification/smtp', [TestNotificationController::class, 'testSmtpConnection'])->name('admin.test.smtp');
        Route::post('/test-notification/fonnte', [TestNotificationController::class, 'testFonnteConnection'])->name('admin.test.fonnte');
        Route::post('/test-notification/email', [TestNotificationController::class, 'testEmail'])->name('admin.test.email');
        Route::post('/test-notification/whatsapp', [TestNotificationController::class, 'testWhatsApp'])->name('admin.test.whatsapp');
    });
});
