<?php

use App\Http\Controllers\Auth\AppleSignInController;
use App\Http\Controllers\Auth\AuthenticatedSessionController;
use App\Http\Controllers\Auth\EmployerAuthController;
use App\Http\Controllers\Auth\GoogleSignInController;
use App\Http\Controllers\Auth\JobSeekerAuthController;
use App\Http\Controllers\Auth\LinkedInSignInController;
use App\Http\Controllers\Auth\MicrosoftSignInController;
use App\Http\Controllers\Auth\NewPasswordController;
use App\Http\Controllers\Auth\PasswordResetLinkController;
use App\Http\Controllers\Auth\RegisteredUserController;
use App\Http\Controllers\BlogController;
use App\Http\Controllers\Candidate\AlertController;
use App\Http\Controllers\Candidate\ApplicationController as CandidateApplicationController;
use App\Http\Controllers\Candidate\CandidateController;
use App\Http\Controllers\Candidate\DashboardController as CandidateDashboardController;
use App\Http\Controllers\Candidate\ProfileController as CandidateProfileController;
use App\Http\Controllers\Candidate\SavedJobController;
use App\Http\Controllers\Candidate\SettingsController;
use App\Http\Controllers\CategoryController;
use App\Http\Controllers\CheckoutController;
use App\Http\Controllers\CompanyController;
use App\Http\Controllers\DashboardRedirectController;
use App\Http\Controllers\EmergencyFixController;
use App\Http\Controllers\Employer\ApplicationController as EmployerApplicationController;
use App\Http\Controllers\Employer\BillingController;
use App\Http\Controllers\Employer\CompanyController as EmployerCompanyController;
use App\Http\Controllers\Employer\DashboardController as EmployerDashboardController;
use App\Http\Controllers\Employer\JobController as EmployerJobController;
use App\Http\Controllers\FeedController;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\JobApplicationController;
use App\Http\Controllers\JobController;
use App\Http\Controllers\JobFeedController;
use App\Http\Controllers\JobWidgetController;
use App\Http\Controllers\LegacyRedirectController;
use App\Http\Controllers\LocationLandingController;
use App\Http\Controllers\PricingController;
use App\Http\Controllers\PublicProfileController;
use App\Http\Controllers\RobotsTxtController;
use App\Http\Controllers\SitemapController;
use App\Http\Controllers\StripeWebhookController;
use App\Models\SiteSetting;
use Illuminate\Support\Facades\Route;

// Permanent redirects for legacy / alternate URLs
Route::redirect('/employers', '/companies', 301);

// Legacy JBoard taxonomy pages — no dedicated views exist for these yet, so
// redirect to the jobs listing. Locations pass through as a free-text
// "location" filter, since JobController::index() already supports one.
// Job types have no equivalent filter param, so they redirect to the plain
// listing rather than guess at a mapping.
Route::get('/locations/{slug}', function (string $slug) {
    return redirect('/jobs?location='.urlencode(str_replace('-', ' ', $slug)), 301);
})->name('locations.legacy-redirect');

Route::get('/job-types/{slug}', function () {
    return redirect('/jobs', 301);
})->name('job-types.legacy-redirect');

// Static images via PHP
Route::get('/img/{filename}', function (string $filename) {
    $path = storage_path('app/images/'.basename($filename));
    abort_if(! file_exists($path), 404);
    $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
    $mime = match ($ext) {
        'png' => 'image/png',
        'jpg','jpeg' => 'image/jpeg',
        'gif' => 'image/gif',
        'webp' => 'image/webp',
        'svg' => 'image/svg+xml',
        default => 'application/octet-stream',
    };

    return response()->file($path, ['Content-Type' => $mime]);
})->name('img');

// SEO / Crawl files
Route::get('/robots.txt', [RobotsTxtController::class, 'robots'])->name('robots');
Route::get('/ads.txt', [RobotsTxtController::class, 'ads'])->name('ads');
Route::get('/sitemap.xml', [SitemapController::class, 'index'])->name('sitemap');
Route::get('/sitemap-jobs.xml', [SitemapController::class, 'jobs'])->name('sitemap.jobs');
Route::get('/sitemap-companies.xml', [SitemapController::class, 'companies'])->name('sitemap.companies');
Route::get('/sitemap-static.xml', [SitemapController::class, 'staticPages'])->name('sitemap.static');
Route::get('/sitemap-blog.xml', [SitemapController::class, 'blog'])->name('sitemap.blog');
Route::get('/sitemap-locations.xml', [SitemapController::class, 'locations'])->name('sitemap.locations');

// Legacy JBoard sitemap files — no direct equivalent exists on the new site,
// so redirect to the closest current sitemap rather than 404.
Route::redirect('/sitemap-general.xml', '/sitemap.xml', 301);
Route::redirect('/sitemap-tags.xml', '/sitemap.xml', 301);
Route::redirect('/sitemap-categories.xml', '/sitemap.xml', 301);
Route::redirect('/sitemap-job-types.xml', '/sitemap.xml', 301);
Route::redirect('/sitemap-blog-categories.xml', '/sitemap.xml', 301);
Route::redirect('/sitemap-categories-with-remote-jobs.xml', '/sitemap.xml', 301);

// Legacy JBoard paginated sitemaps — redirect each page to the single
// current sitemap of that type.
Route::redirect('/sitemap-jobs-{n}.xml', '/sitemap-jobs.xml', 301)->where('n', '[0-9]+');
Route::redirect('/sitemap-companies-{n.xml', '/sitemap-companies.xml', 301)->where('n', '[0-9]+');
Route::redirect('/sitemap-blog-{n}.xml', '/sitemap-blog.xml', 301)->where('n', '[0-9]+');

// Job feeds — static platform feeds
Route::get('/feed.xml', [FeedController::class, 'rss'])->name('feed.rss');
Route::get('/feed.json', [FeedController::class, 'json'])->name('feed.json');

// Exportable named job feeds — public, no auth required
Route::get('/feeds/{slug}', [JobFeedController::class, 'show'])->name('feeds.show');

// Embeddable jobs widget JavaScript
Route::get('/widget/jobs.js', [JobWidgetController::class, 'script'])->name('widget.jobs');

// Stripe Webhooks (must be csrf-exempt — placed before auth middleware)
Route::post('/stripe/webhook', [StripeWebhookController::class, 'handle'])->name('stripe.webhook');

// Public / Job Board
Route::get('/', [HomeController::class, 'index'])->name('home');
Route::get('/jobs', [JobController::class, 'index'])->name('jobs.index');

// Location landing pages — e.g. /jobs/in-hereford-herefordshire-england-united-kingdom
// MUST be declared before /jobs/{slug} so the router matches it first.
// The constraint ensures this only fires for slugs that literally start with a letter,
// and the route literal "in-" anchors it to location-style URLs only.
Route::get('/jobs/in-{locationSlug}', [LocationLandingController::class, 'show'])
    ->where('locationSlug', '[a-z][a-z0-9\-]*')
    ->name('jobs.location');

// Legacy JBoard job URLs (e.g. /jobs/172640657-support-progression-officer).
// The {legacy} constraint only matches an id-prefixed slug, so this never
// shadows a current job's /jobs/{slug} URL — anything that doesn't match
// falls through to the route below.
Route::get('/jobs/{legacy}', [LegacyRedirectController::class, 'legacyJob'])
    ->where('legacy', '^\d+-.+$')
    ->name('jobs.legacy-redirect');

// 301 redirects for old date-based Jboard artefact URLs
Route::redirect('/jobs/april-30-2021', '/jobs', 301);
Route::redirect('/jobs/december-18-2025', '/jobs', 301);
Route::redirect('/jobs/become-a-householder', '/jobs', 301);

Route::get('/jobs/{slug}', [JobController::class, 'show'])->name('jobs.show');
Route::get('/companies', [CompanyController::class, 'index'])->name('companies.index');
Route::get('/companies/{slug}', [CompanyController::class, 'show'])->name('companies.show');
Route::get('/categories/{slug}', [CategoryController::class, 'show'])->name('categories.show');
// Tags: redirect to jobs listing until a dedicated TagController/view is built
Route::redirect('/tags/{tag}', '/jobs', 301);
Route::get('/blog', [BlogController::class, 'index'])->name('blog.index');
Route::get('/blog/{slug}', [BlogController::class, 'show'])->name('blog.show');
Route::get('/profiles', [PublicProfileController::class, 'index'])->name('profiles.index');
Route::get('/profiles/{id}', [PublicProfileController::class, 'show'])->name('profiles.show');
Route::get('/pricing', [PricingController::class, 'index'])->name('pricing.index');

// Policy pages
Route::get('/terms', function () {
    return view('pages.terms', ['content' => SiteSetting::get('tos_page_content', '')]);
})->name('terms');
Route::get('/privacy', function () {
    return view('pages.privacy', ['content' => SiteSetting::get('privacy_page_content', '')]);
})->name('privacy');
Route::get('/cookies', function () {
    return view('pages.cookies', ['content' => SiteSetting::get('cookies_page_content', '')]);
})->name('cookies');
Route::get('/resources', function () {
    return view('pages.resources');
})->name('resources');

// Contact page
Route::get('/contact', function () {
    $settings = (object) [
        'contact_address' => SiteSetting::get('contact_address', ''),
        'contact_phone'   => SiteSetting::get('contact_phone', ''),
        'contact_email'   => SiteSetting::get('contact_email', 'info@homelesshosteljobs.co.uk'),
    ];

    return view('contact', compact('settings'));
})->name('contact');

// External apply click
Route::get('/jobs/{slug}/apply/external', [JobApplicationController::class, 'external'])
    ->name('applications.external');

// Social OAuth
Route::get('/auth/google/redirect', [GoogleSignInController::class, 'redirect'])->name('auth.google.redirect');
Route::get('/auth/google/callback', [GoogleSignInController::class, 'callback'])->name('auth.google.callback');

Route::get('/auth/apple/redirect', [AppleSignInController::class, 'redirect'])->name('auth.apple.redirect');
Route::get('/auth/apple/callback', [AppleSignInController::class, 'callback'])->name('auth.apple.callback');

Route::get('/auth/microsoft/redirect', [MicrosoftSignInController::class, 'redirect'])->name('auth.microsoft.redirect');
Route::get('/auth/microsoft/callback', [MicrosoftSignInController::class, 'callback'])->name('auth.microsoft.callback');

Route::get('/auth/linkedin/redirect', [LinkedInSignInController::class, 'redirect'])->name('auth.linkedin.redirect');
Route::get('/auth/linkedin/callback', [LinkedInSignInController::class, 'callback'])->name('auth.linkedin.callback');

// Guest-only auth routes
Route::middleware('guest')->group(function () {
    Route::get('/register', [RegisteredUserController::class, 'create'])->name('register');
    Route::post('/register', [RegisteredUserController::class, 'store'])->middleware('throttle:10,1');
    Route::get('/login', [AuthenticatedSessionController::class, 'create'])->name('login');
    Route::post('/login', [AuthenticatedSessionController::class, 'store'])->middleware('throttle:10,1');
    Route::get('/forgot-password', [PasswordResetLinkController::class, 'create'])->name('password.request');
    Route::post('/forgot-password', [PasswordResetLinkController::class, 'store'])->middleware('throttle:5,1')->name('password.email');
    Route::get('/reset-password/{token}', [NewPasswordController::class, 'create'])->name('password.reset');
    Route::post('/reset-password', [NewPasswordController::class, 'store'])->name('password.store');

    Route::get('/auth/choose/login', fn () => view('auth.choose-role-login'))->name('auth.choose-role.login');
    Route::get('/auth/choose/register', fn () => view('auth.choose-role-register'))->name('auth.choose-role.register');

    Route::get('/jobseeker/login', [JobSeekerAuthController::class, 'loginForm'])->name('jobseeker.login');
    Route::get('/jobseeker/register', [JobSeekerAuthController::class, 'registerForm'])->name('jobseeker.register');
    Route::post('/jobseeker/register', [JobSeekerAuthController::class, 'register'])->name('jobseeker.register.store')->middleware('throttle:10,1');

    Route::get('/employer/login', [EmployerAuthController::class, 'loginForm'])->name('employer.login');
    Route::get('/employer/register', [EmployerAuthController::class, 'registerForm'])->name('employer.register');
    Route::post('/employer/register', [EmployerAuthController::class, 'register'])->name('employer.register.store')->middleware('throttle:10,1');
});

// Authenticated routes
Route::middleware('auth')->group(function () {
    Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'])->name('logout');
    Route::get('/dashboard', DashboardRedirectController::class)->name('dashboard');

    // -----------------------------------------------------------------------
    // Emergency fix routes (platform_administrator only)
    // -----------------------------------------------------------------------
    Route::prefix('admin/emergency-fix')->name('admin.emergency-fix.')->group(function () {
        Route::get('/night-categorization', [EmergencyFixController::class, 'nightCategorization'])
            ->name('night-categorization');
        Route::get('/strip-vacancy-title-prefix', [EmergencyFixController::class, 'stripVacancyTitlePrefix'])
            ->name('strip-vacancy-title-prefix');
    });

    // -----------------------------------------------------------------------
    // Checkout — success/cancel registered BEFORE {product} wildcard
    // -----------------------------------------------------------------------
    Route::get('/checkout/success', [CheckoutController::class, 'success'])->name('checkout.success');
    Route::get('/checkout/cancel', [CheckoutController::class, 'cancel'])->name('checkout.cancel');
    Route::get('/checkout/{product}', [CheckoutController::class, 'create'])->name('checkout.create');

    // -----------------------------------------------------------------------
    // /account/* — unified candidate dashboard (CandidateController)
    // Candidates are redirected here after login via DashboardRedirectController
    // -----------------------------------------------------------------------
    Route::middleware(['role:candidate'])->prefix('account')->name('account.')->group(function () {
        Route::get('/dashboard', [CandidateController::class, 'dashboard'])->name('dashboard');
        Route::get('/applications', [CandidateController::class, 'applications'])->name('applications');
        Route::get('/saved-jobs', [CandidateController::class, 'savedJobs'])->name('saved-jobs');
        Route::get('/profile', [CandidateController::class, 'profile'])->name('profile');
        Route::post('/profile', [CandidateController::class, 'updateProfile'])->name('profile.update');
    });

    // -----------------------------------------------------------------------
    // /candidate/* — original granular candidate routes (kept for compatibility)
    // -----------------------------------------------------------------------
    Route::prefix('candidate')->name('candidate.')->middleware('role:candidate')->group(function () {
        Route::get('/dashboard', [CandidateDashboardController::class, 'index'])->name('dashboard');
        Route::get('/profile', [CandidateProfileController::class, 'edit'])->name('profile.edit');
        Route::put('/profile', [CandidateProfileController::class, 'update'])->name('profile.update');
        Route::get('/saved-jobs', [SavedJobController::class, 'index'])->name('saved-jobs.index');
        Route::post('/saved-jobs/{job}', [SavedJobController::class, 'store'])->name('saved-jobs.store');
        Route::delete('/saved-jobs/{job}', [SavedJobController::class, 'destroy'])->name('saved-jobs.destroy');
        Route::get('/applications', [CandidateApplicationController::class, 'index'])->name('applications.index');
        Route::get('/alerts', [AlertController::class, 'index'])->name('alerts.index');
        Route::post('/alerts', [AlertController::class, 'store'])->name('alerts.store');
        Route::delete('/alerts/{alert}', [AlertController::class, 'destroy'])->name('alerts.destroy');
    });

    // Employer
    Route::prefix('employer')->name('employer.')->middleware('role:employer_member|employer_manager')->group(function () {
        Route::get('/dashboard', [EmployerDashboardController::class, 'index'])->name('dashboard');
        Route::get('/jobs', [EmployerJobController::class, 'index'])->name('jobs.index');

        // Job create/manage routes require an active employer package
        Route::middleware('employer.package')->group(function () {
            Route::get('/jobs/create', [EmployerJobController::class, 'create'])->name('jobs.create');
            Route::post('/jobs', [EmployerJobController::class, 'store'])->name('jobs.store');
            Route::get('/jobs/{job}/edit', [EmployerJobController::class, 'edit'])->name('jobs.edit');
            Route::put('/jobs/{job}', [EmployerJobController::class, 'update'])->name('jobs.update');
            Route::patch('/jobs/{job}/submit', [EmployerJobController::class, 'submit'])->name('jobs.submit');
        });

        Route::get('/applications', [EmployerApplicationController::class, 'index'])->name('applications.index');
        Route::get('/applications/{application}', [EmployerApplicationController::class, 'show'])->name('applications.show');
        Route::post('/applications/{application}/status', [EmployerApplicationController::class, 'updateStatus'])->name('applications.status');
        Route::get('/company/setup', [EmployerCompanyController::class, 'create'])->name('company.setup');
        Route::post('/company/setup', [EmployerCompanyController::class, 'store'])->name('company.store');
        Route::get('/company', [EmployerCompanyController::class, 'edit'])->name('company.edit');
        Route::put('/company', [EmployerCompanyController::class, 'update'])->name('company.update');
        Route::get('/billing', [BillingController::class, 'index'])->name('billing.index');
    });

    // /my/* aliases
    Route::prefix('my')->name('my.')->middleware('role:candidate')->group(function () {
        Route::get('/dashboard', fn () => redirect()->route('candidate.dashboard'))->name('dashboard');
        Route::get('/applications', fn () => redirect()->route('candidate.applications.index'))->name('applications');
        Route::get('/saved-jobs', fn () => redirect()->route('candidate.saved-jobs.index'))->name('saved-jobs');
        Route::get('/profile', fn () => redirect()->route('candidate.profile.edit'))->name('profile');
        Route::get('/settings', [SettingsController::class, 'edit'])->name('settings');
        Route::put('/settings', [SettingsController::class, 'update'])->name('settings.update');
        Route::delete('/settings/account', [SettingsController::class, 'destroy'])->name('settings.destroy');
    });

    // Job applications (platform apply)
    Route::middleware('role:candidate')->group(function () {
        Route::get('/jobs/{slug}/apply', [JobApplicationController::class, 'create'])->name('applications.create');
        Route::post('/jobs/{slug}/apply', [JobApplicationController::class, 'store'])->middleware('throttle:10,1')->name('applications.store');
        Route::post('/jobs/{job}/easy-apply', [JobApplicationController::class, 'easyApplyStore'])->middleware('throttle:5,1')->name('jobs.easy-apply');
    });
});
