<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Public\HomeController;
use App\Http\Controllers\Public\JobController;
use App\Http\Controllers\Public\DepartmentController as PublicDepartmentController;
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\JobPostingController;
use App\Http\Controllers\Admin\JobFormSettingsController;
use App\Http\Controllers\Admin\ApplicationController;
use App\Http\Controllers\Admin\UserController;
use App\Http\Controllers\Admin\ActivityLogController;
use App\Http\Controllers\Admin\SiteSettingController;
use App\Http\Controllers\Admin\DepartmentController;
use App\Http\Controllers\Admin\InterviewController;
use App\Http\Controllers\Admin\RoleController;
use App\Http\Controllers\Admin\ProfileController;

// =====================
// PUBLIC ROUTES
// =====================
Route::get('/', [HomeController::class, 'index'])->name('home');

Route::get('/pozisyon/{slug}', [JobController::class, 'show'])->name('job.show');
Route::post('/pozisyon/{slug}/basvur', [JobController::class, 'apply'])
    ->name('job.apply')
    ->middleware('throttle:3,1');

Route::get('/departman/{slug}', [PublicDepartmentController::class, 'show'])->name('department.show');
Route::get('/kvkk', function () {
    return view('public.kvkk');
})->name('kvkk');

// =====================
// ADMIN ROUTES
// =====================
Route::prefix('admin')->name('admin.')->middleware(['auth', 'verified'])->group(function () {

    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');

    // İlan Yönetimi
    Route::resource('ilanlar', JobPostingController::class)->middleware('can:view job postings');
    Route::post('ilanlar/{jobPosting}/publish', [JobPostingController::class, 'publish'])
        ->name('ilanlar.publish')->middleware('can:publish job postings');
    Route::post('ilanlar/{jobPosting}/close', [JobPostingController::class, 'close'])
        ->name('ilanlar.close')->middleware('can:publish job postings');
    Route::post('ilanlar/{jobPosting}/duplicate', [JobPostingController::class, 'duplicate'])
        ->name('ilanlar.duplicate')->middleware('can:create job postings');
    Route::post('ilanlar/{jobPosting}/draft', [JobPostingController::class, 'makeDraft'])
        ->name('ilanlar.draft')->middleware('can:publish job postings');
    Route::get('ilanlar/{jobPosting}/export-pdf', [JobPostingController::class, 'exportPdf'])
        ->name('ilanlar.export-pdf')->middleware('can:view job postings');
    Route::get('ilanlar/{jobPosting}/application-form', [JobPostingController::class, 'generateApplicationForm'])
        ->name('ilanlar.application-form')->middleware('can:view job postings');
    Route::get('ilanlar/{jobPosting}/preview-template', [JobPostingController::class, 'previewTemplate'])
        ->name('ilanlar.preview-template')->middleware('can:view job postings');
    Route::get('ilanlar/{jobPosting}/download-form', [JobPostingController::class, 'downloadCustomForm'])
        ->name('ilanlar.download-form')->middleware('can:view job postings');

    // Form Ayarları (singleton settings)
    Route::get('form-ayarlari', [JobFormSettingsController::class, 'show'])
        ->name('form-ayarlari.show')->middleware('can:view job postings');
    Route::post('form-ayarlari', [JobFormSettingsController::class, 'update'])
        ->name('form-ayarlari.update')->middleware('can:view job postings');

    // Başvuru Yönetimi
    Route::get('basvurular/gecmis', [ApplicationController::class, 'gecmis'])
        ->name('basvurular.gecmis')->middleware('can:view applications');
    Route::get('basvurular', [ApplicationController::class, 'index'])
        ->name('basvurular.index')->middleware('can:view applications');
    Route::get('basvurular/{application}', [ApplicationController::class, 'show'])
        ->name('basvurular.show')->middleware('can:view applications');
    Route::patch('basvurular/{application}/status', [ApplicationController::class, 'updateStatus'])
        ->name('basvurular.status')->middleware('can:edit application status');
    Route::patch('basvurular/{application}/notes', [ApplicationController::class, 'updateNotes'])
        ->name('basvurular.notes')->middleware('can:add application notes');
    Route::get('basvurular/{application}/cv', [ApplicationController::class, 'downloadCv'])
        ->name('basvurular.cv')->middleware('can:view applications');
    Route::get('basvurular/{application}/cv/view', [ApplicationController::class, 'viewCv'])
        ->name('basvurular.cv.view')->middleware('can:view applications');
    Route::get('basvurular/{application}/cv-scan-status', [ApplicationController::class, 'cvScanStatus'])
        ->name('basvurular.cv-scan-status')->middleware('can:view applications');
    Route::post('basvurular/{application}/rescan', [ApplicationController::class, 'rescan'])
        ->name('basvurular.rescan')->middleware('can:view applications');
    Route::post('basvurular/bulk-status', [ApplicationController::class, 'bulkStatus'])
        ->name('basvurular.bulk-status')->middleware('can:edit application status');
    Route::get('basvurular/export/{jobPosting}', [ApplicationController::class, 'export'])
        ->name('basvurular.export')->middleware('can:export applications');
    Route::post('basvurular/merge-excel/{jobPosting}', [ApplicationController::class, 'mergeExcel'])
        ->name('basvurular.merge-excel')->middleware('can:export applications');

    // KVKK Manuel Purge — sadece super-admin, CSRF korumalı POST
    Route::post('basvurular/kvkk-purge', [ApplicationController::class, 'kvkkPurge'])
        ->name('basvurular.kvkk-purge')->middleware('role:super-admin');

    // Departman Yönetimi
    Route::get('departmanlar', [DepartmentController::class, 'index'])
        ->name('departmanlar.index')->middleware('can:view departments');
    Route::get('departmanlar/create', [DepartmentController::class, 'create'])
        ->name('departmanlar.create')->middleware('can:create departments');
    Route::post('departmanlar', [DepartmentController::class, 'store'])
        ->name('departmanlar.store')->middleware('can:create departments');
    Route::get('departmanlar/{departman}', [DepartmentController::class, 'show'])
        ->name('departmanlar.show')->middleware('can:view departments');
    Route::get('departmanlar/{departman}/edit', [DepartmentController::class, 'edit'])
        ->name('departmanlar.edit')->middleware('can:edit departments');
    Route::put('departmanlar/{departman}', [DepartmentController::class, 'update'])
        ->name('departmanlar.update')->middleware('can:edit departments');
    Route::patch('departmanlar/{departman}', [DepartmentController::class, 'update'])
        ->middleware('can:edit departments');
    Route::delete('departmanlar/{departman}', [DepartmentController::class, 'destroy'])
        ->name('departmanlar.destroy')->middleware('can:delete departments');
    Route::post('departmanlar/{departman}/toggle-active', [DepartmentController::class, 'toggleActive'])
        ->name('departmanlar.toggle-active')->middleware('can:edit departments');
    Route::post('departmanlar/{departman}/toggle-open-applications', [DepartmentController::class, 'toggleOpenApplications'])
        ->name('departmanlar.toggle-open-applications')->middleware('can:edit departments');

    // Görüşme Yönetimi — önce sabit route'lar, sonra resource (parametre çakışmasını önlemek için)
    Route::get('gorusmeler-takvim', [InterviewController::class, 'calendar'])
        ->name('gorusmeler.calendar')->middleware('can:view interviews');
    Route::get('gorusmeler/by-date', [InterviewController::class, 'getInterviewsByDate'])
        ->name('gorusmeler.by-date')->middleware('can:view interviews');
    Route::get('gorusmeler/search-applications', [InterviewController::class, 'searchApplications'])
        ->name('gorusmeler.search-applications')->middleware('can:view interviews');
    Route::post('gorusmeci', [InterviewController::class, 'storeGorusmeci'])
        ->name('gorusmeci.store')->middleware('role:super-admin');
    Route::resource('gorusmeler', InterviewController::class)
        ->parameters(['gorusmeler' => 'gorusme'])
        ->middleware('can:view interviews');

    // Site Ayarları — view site settings olan görebilir; yazma işlemleri sekme bazında korunur
    Route::get('ayarlar', [SiteSettingController::class, 'index'])
        ->name('ayarlar.index')->middleware('can:view site settings');
    // Genel Ayarlar sekmesi (logo/favicon + genel + banner + virustotal)
    Route::post('ayarlar', [SiteSettingController::class, 'update'])
        ->name('ayarlar.update')->middleware('can:manage general settings');
    // Google Calendar sekmesi
    Route::post('ayarlar/google-save', [SiteSettingController::class, 'googleSave'])
        ->name('ayarlar.google-save')->middleware('can:manage google calendar settings');
    Route::post('ayarlar/google-test', [SiteSettingController::class, 'googleTest'])
        ->name('ayarlar.google-test')->middleware('can:manage google calendar settings');
    Route::post('ayarlar/google-disconnect', [SiteSettingController::class, 'googleDisconnect'])
        ->name('ayarlar.google-disconnect')->middleware('can:manage google calendar settings');
    Route::get('ayarlar/google-callback', function (\Illuminate\Http\Request $request) {
        // Bu route artık kullanılmıyor — OAuth profil üzerinden yapılıyor.
        // Eski bağlantılar için yönlendirme.
        return redirect()->route('admin.profil.show')
            ->with('info', 'Google Takvim bağlantısı artık profil sayfasından yapılmaktadır.');
    })->name('ayarlar.google-callback');

    // Kullanıcı Yönetimi
    Route::get('kullanicilar', [UserController::class, 'index'])
        ->name('kullanicilar.index')->middleware('can:view users');
    Route::get('kullanicilar/create', [UserController::class, 'create'])
        ->name('kullanicilar.create')->middleware('can:create users');
    Route::post('kullanicilar', [UserController::class, 'store'])
        ->name('kullanicilar.store')->middleware('can:create users');
    Route::get('kullanicilar/{kullanicilar}', [UserController::class, 'show'])
        ->name('kullanicilar.show')->middleware('can:view users');
    Route::get('kullanicilar/{kullanicilar}/edit', [UserController::class, 'edit'])
        ->name('kullanicilar.edit')->middleware('can:edit users');
    Route::put('kullanicilar/{kullanicilar}', [UserController::class, 'update'])
        ->name('kullanicilar.update')->middleware('can:edit users');
    Route::patch('kullanicilar/{kullanicilar}', [UserController::class, 'update'])
        ->middleware('can:edit users');
    Route::delete('kullanicilar/{kullanicilar}', [UserController::class, 'destroy'])
        ->name('kullanicilar.destroy')->middleware('can:delete users');

    // Rol Yönetimi (sadece super-admin)
    Route::resource('roller', RoleController::class)->middleware('role:super-admin');

    // Aktivite Logları (sadece super-admin)
    Route::get('loglar', [ActivityLogController::class, 'index'])
        ->name('loglar.index')->middleware('can:view logs');

    // Profil
    Route::get('profil', [ProfileController::class, 'show'])->name('profil.show');
    Route::put('profil', [ProfileController::class, 'update'])->name('profil.update');
    Route::put('profil/password', [ProfileController::class, 'updatePassword'])->name('profil.password');
    Route::post('profil/avatar', [ProfileController::class, 'updateAvatar'])->name('profil.avatar');
    Route::delete('profil/avatar', [ProfileController::class, 'removeAvatar'])->name('profil.avatar.remove');

    // Profil — Google Calendar OAuth
    Route::get('profil/google-connect', [ProfileController::class, 'googleConnect'])->name('profil.google.connect');
    Route::get('profil/google-callback', [ProfileController::class, 'googleCallback'])->name('profil.google.callback');
    Route::post('profil/google-disconnect', [ProfileController::class, 'googleDisconnect'])->name('profil.google.disconnect');

    // Erişim Yok sayfası
    Route::get('erisim-yok', function () {
        $from = request('from', '');
        $labels = [
            'ilanlar'      => 'İş İlanları',
            'basvurular'   => 'Başvurular',
            'gorusmeler'   => 'Görüşmeler',
            'departmanlar' => 'Departmanlar',
            'ayarlar'      => 'Site Ayarları',
            'kullanicilar' => 'Kullanıcılar',
            'roller'       => 'Rol Yönetimi',
            'loglar'       => 'Aktivite Logları',
        ];
        $pageLabel = $labels[$from] ?? 'Bu sayfa';
        return view('errors.403', compact('pageLabel'));
    })->name('erisim-yok');

    // Genel Ayarlar sekmesi — logo/favicon
    Route::post('ayarlar/branding', [SiteSettingController::class, 'brandingUpdate'])
        ->name('ayarlar.branding')->middleware('can:manage general settings');
    // VirusTotal sekmesi — ayarlar.update POST'u hem genel hem virustotal için kullanılıyor;
    // virustotal ayrı route yoksa genel settings üzerinden geliyor (manage general settings yeterli)
    // Sistem sekmesi — Yedek, Bakım Modu, Test E-posta, Sistem Bilgisi
    Route::post('ayarlar/backup', [SiteSettingController::class, 'backup'])
        ->name('ayarlar.backup')->middleware('can:manage system settings');
    Route::post('ayarlar/maintenance', [SiteSettingController::class, 'maintenanceToggle'])
        ->name('ayarlar.maintenance')->middleware('can:manage system settings');
    Route::get('ayarlar/system-info', [SiteSettingController::class, 'systemInfo'])
        ->name('ayarlar.system-info')->middleware('can:manage system settings');

    // KVKK Veri Silme — sadece super-admin, CSRF korumalı
    Route::post('ayarlar/kvkk-delete-single/{application}', [SiteSettingController::class, 'kvkkDeleteSingle'])
        ->name('ayarlar.kvkk-delete-single')->middleware('role:super-admin');
    Route::post('ayarlar/kvkk-delete-all', [SiteSettingController::class, 'kvkkDeleteAll'])
        ->name('ayarlar.kvkk-delete-all')->middleware('role:super-admin');
});

// Admin login redirect
Route::get('/admin', function () {
    return redirect()->route('admin.dashboard');
})->middleware('auth');

Route::get('/admin/login', function () {
    return redirect()->route('login');
});