<?php

use FontLib\Table\Type\name;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\CmsController;
use App\Http\Controllers\OrderController;
use App\Http\Controllers\Admin\AddressController;
use App\Http\Controllers\Admin\JobController;
use App\Http\Controllers\Admin\TagController;
use App\Http\Controllers\Admin\UserController;
use App\Http\Controllers\Admin\AdminController;
use App\Http\Controllers\Admin\RolesController;
use App\Http\Controllers\Admin\SkillController;
use App\Http\Controllers\AutoUpdaterController;
use App\Http\Controllers\Admin\BenefitController;
use App\Http\Controllers\Admin\CompanyController;
use App\Http\Controllers\Admin\JobRoleController;
use App\Http\Controllers\Admin\PaymentController;
use App\Http\Controllers\Admin\ProfileController;
use App\Http\Controllers\Admin\SettingsController;
use App\Http\Controllers\Admin\CandidateController;
use App\Http\Controllers\Admin\SocialiteController;
use App\Http\Controllers\Admin\Auth\LoginController;
use App\Http\Controllers\Admin\ProfessionController;
use App\Http\Controllers\Admin\JobCategoryController;
use App\Http\Controllers\Admin\IndustryTypeController;
use App\Http\Controllers\Website\WebsiteSettingController;
use App\Http\Controllers\Admin\AffiliateSettingsController;
use App\Http\Controllers\Admin\CandidateLanguageController;
use App\Http\Controllers\Admin\Auth\ResetPasswordController;
use App\Http\Controllers\Admin\Auth\ForgotPasswordController;
use App\Http\Controllers\Admin\EmailTemplateController;
use App\Http\Controllers\Admin\UniversityController;
use App\Http\Controllers\Admin\ReviewController;
use App\Http\Controllers\Admin\LeadController;
use App\Http\Controllers\Admin\Course\CourseController;
use App\Http\Controllers\Admin\Course\CourseCategoryController;
use App\Http\Controllers\Admin\Course\CourseLevelController;
use App\Http\Controllers\Admin\SourcesController;
use App\Http\Controllers\Admin\BetaCandidateController;
use App\Http\Controllers\Admin\LeadManagementController;
use App\Http\Controllers\Admin\CampaignManagementController;
use App\Http\Controllers\Admin\SubscriberListController;


use App\Http\Controllers\Admin\DBcitystatecountryController;
use App\Http\Controllers\Admin\ExcelUploadController;
use App\Http\Controllers\Admin\SeoSettingsController;
use App\Http\Controllers\Admin\IntakeController;





Route::get('/db', [DBcitystatecountryController::class, 'countryData']);


Route::prefix('admin')->group(function () {
    /**
     * Auth routes
     */
    Route::get('/login', [LoginController::class, 'showLoginForm'])->name('login.admin');
    Route::post('/login', [LoginController::class, 'login'])->name('admin.login');
    Route::post('/logout', [LoginController::class, 'logout'])->name('admin.logout');

    Route::middleware(['guest:admin'])->group(function () {
        Route::post('password/email', [ForgotPasswordController::class, 'sendResetLinkEmail'])->name('admin.password.email');
        Route::get('password/reset', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('admin.password.request');
        Route::post('password/reset', [ResetPasswordController::class, 'reset'])->name('admin.password.update');
        Route::get('password/reset/{token}', [ResetPasswordController::class, 'showResetForm'])->name('admin.password.reset');
    });

    Route::middleware(['auth:admin'])->group(function () {
        Route::get('/',  [AdminController::class, 'dashboard']);

        //Dashboard Route
        Route::get('/dashboard', [AdminController::class, 'dashboard'])->name('admin.dashboard');
        Route::get('/weekly-data', [AdminController::class, 'getWeeklyData'])->name('weekly-data');
        Route::get('/getCityData', [AdminController::class, 'getCityData'])->name('getCityData');
        Route::get('/getMonthlyCityData', [AdminController::class, 'getMonthlyCityData'])->name('getMonthlyCityData');
        Route::get('/getMonthlyData', [AdminController::class, 'getMonthlyData'])->name('getMonthlyData');
        Route::get('/getYearlyDataChart', [AdminController::class, 'getYearlyDataChart'])->name('getYearlyDataChart');
        Route::get('/getTimeLineData', [AdminController::class, 'getTimeLineData'])->name('getTimeLineData');
        Route::get('/getPreferredCountryData', [AdminController::class, 'getPreferredCountryData'])->name('getPreferredCountryData'); 

        //Lead Management Route
        Route::get('/lead-management', [LeadManagementController::class, 'index'])->name('admin.leaddashboard');
        Route::get('/lead/getMapData', [LeadManagementController::class, 'getMapData'])->name('lead.getMapData');
        Route::get('/lead/getCityData', [LeadManagementController::class, 'getCityData'])->name('lead.getCityData');
        Route::get('/lead/getStateData', [LeadManagementController::class, 'getStateData'])->name('lead.getStateData');
        Route::get('/lead/getCountryData', [LeadManagementController::class, 'getCountryData'])->name('lead.getCountryData');
        Route::get('/lead/getAgentDataByAdmin', [LeadManagementController::class, 'getAgentDataByAdmin'])->name('lead.getAgentDataByAdmin');
        
        //Campaign Management Route
        Route::get('/campaign-management', [CampaignManagementController::class, 'index'])->name('admin.campaigndashboard');


        //Subscriber List Route
        Route::get('/subscriberlist', [SubscriberListController::class, 'index'])->name('admin.subscriberlist');

        // excel uplad
        Route::get('/excelupload', [ExcelUploadController::class, 'excelUpload'])->name('admin.exceluploads');
        Route::post('/excelupload', [ExcelUploadController::class, 'upload'])->name('excel.upload');
        Route::post('/coursesUpload', [ExcelUploadController::class, 'coursesUpload'])->name('excel.coursesUpload');



        Route::post('/notifications/read', [AdminController::class, 'notificationRead'])->name('admin.notification.read');

        Route::get('/notifications', [AdminController::class, 'allNotifications'])->name('admin.all.notification');

        //Roles Route
        Route::resource('settings/role', RolesController::class)->except(['show']);
        Route::get('/settings/role/permission/create',  [RolesController::class, 'permissionCreate'])->name('admin.role.permissionCreate');
        Route::post('/settings/role/permission/store',  [RolesController::class, 'permissionStore'])->name('admin.role.permissionStore');
        //Users Route
        Route::resource('settings/user', UserController::class);

        //Company Route resource
        Route::resource('company', CompanyController::class);
        Route::post('/company/citylist',  [CompanyController::class, 'getCityList'])->name('admin.getCityByCountry');
        Route::post('/company/statelist',  [CompanyController::class, 'getStateList'])->name('admin.getStateByCountry');
        Route::get('/company/change/status', [CompanyController::class, 'statusChange'])->name('company.status.change');
        Route::get('/company/verify/status', [CompanyController::class, 'verificationChange'])->name('company.verify.change');

        //Course Route resource
        Route::resource('course', CourseController::class);
        Route::resource('coursecategory', CourseCategoryController::class);
        Route::resource('courselevel', CourseLevelController::class);
        Route::get('/course/level/status', [CourseLevelController::class, 'courseLevelStatusChange'])->name('course.status.change');
        Route::get('/course/category/status', [CourseCategoryController::class, 'courseCategoryStatusChange'])->name('course.category.status.change');

        Route::resource('university', UniversityController::class);
        Route::post('/university/citylist',  [UniversityController::class, 'getCityList'])->name('admin.universityGetCityByCountry');
        Route::post('/university/statelist',  [UniversityController::class, 'getStateList'])->name('admin.universityGetStateByCountry');
        Route::get('/university/change/status', [UniversityController::class, 'statusChange'])->name('university.status.change');
        Route::get('/university/verify/status', [UniversityController::class, 'verificationChange'])->name('university.verify.change');

        // ============ Lead ===========
        Route::prefix('review')->group(function () {
            Route::get('/add', [ReviewController::class, 'create'])->name('review.create');
            Route::get('/{slug?}', [ReviewController::class, 'index'])->name('review.index');
            Route::post('/add', [ReviewController::class, 'store'])->name('review.store');
            Route::get('/edit/{review}', [ReviewController::class, 'edit'])->name('review.edit');
            Route::put('/update/{review}', [ReviewController::class, 'update'])->name('review.update');
            Route::delete('/destroy/{review}', [ReviewController::class, 'destroy'])->name('review.destroy');
            Route::post('/selectlist',  [ReviewController::class, 'getSelectBycategory'])->name('review.getSelectBycategory');
            
        });
        // Route::resource('review', ReviewController::class);
        // Route::get('review/{slug?}', [ReviewController::class, 'index'])->name('review.index');
        // ============ Lead ===========
        Route::resource('lead', LeadController::class);
        Route::get('/export-lead', [LeadController::class, 'exportLead'])->name('export-lead');
        Route::get('/download', [LeadController::class, 'download'])->name('admin.download');
        Route::post('/leadfolloup/{id}', [LeadController::class,'storeFollowup'])->name('lead-followup');
        Route::get('/getLeadBy', [LeadController::class, 'getLeadBy'])->name('lead-getLeadBy');

        // ============ Candidate ===========
        Route::resource('candidate', CandidateController::class);
        Route::post('/candidate/get/city', [CandidateController::class, 'city'])->name('candidate.city');
        Route::post('/candidate/get/state', [CandidateController::class, 'state'])->name('candidate.state');
        Route::get('/candidate/change/status', [CandidateController::class, 'statusChange'])->name('candidate.status.change');
        Route::post('/customerfolloup/{id}', [CandidateController::class,'storeFollowup'])->name('customer-followup');
        Route::get('/followup', [CandidateController::class,'getFollowup'])->name('candidate.getFollowup');
        Route::get('/push-notification', [CandidateController::class,'pushNotification'])->name('followup.notification');
        Route::get('/followup-other', [CandidateController::class,'getOtherFollowup'])->name('followup.other');

        Route::post('/customernotes', [CandidateController::class,'storeCustomerNotes'])->name('customer-postNotes');
        Route::post('/assignToChange', [CandidateController::class,'assignToChange'])->name('candidate.assignToChange');
        
        
        Route::get('/customerReport', [CandidateController::class, 'customerReport'])->name('candidate.customerReport');

        Route::post('/candidate/get_documents', [CandidateController::class, 'get_documents'])->name('candidate.get_documents');
        Route::post('/candidate/delete_documents', [CandidateController::class, 'delete_documents'])->name('candidate.delete_documents');
        Route::post('/candidate/documents_upload', [CandidateController::class, 'documents_upload'])->name('candidate.documents_upload');
        // Route::post('/candidate/replace_document', [CandidateController::class, 'replace_document'])->name('candidate.replace_document');
        Route::delete('/candidate/multiple/delete', [CandidateController::class, 'multipleDestroy'])->name('candidate.multiple.delete');
        Route::post('/candidate/passwordUpdate/{id}', [CandidateController::class,'passwordUpdate'])->name('candidate.passwordUpdate');
        Route::post('/candidate/welcomeEmail/{id}', [CandidateController::class,'welcomeEmail'])->name('candidate.welcomeEmail');
        Route::post('/candidate/callBackEmail/{id}', [CandidateController::class,'callBackEmail'])->name('candidate.callBackEmail');
        Route::post('/candidate/customEmail/{id}', [CandidateController::class,'customEmail'])->name('candidate.customEmail');
        Route::post('/candidate/multiple/restore', [CandidateController::class, 'multipleRestore'])->name('candidate.multiple.restore');
        
        
        ///////////////////////////////////////beta testting ///////////////////////
        Route::resource('betacandidate', BetaCandidateController::class);
        Route::post('/betacandidate/get/city', [BetaCandidateController::class, 'city'])->name('betacandidate.city');
        Route::post('/betacandidate/get/state', [BetaCandidateController::class, 'state'])->name('betacandidate.state');
        Route::get('/betacandidate/change/status', [BetaCandidateController::class, 'statusChange'])->name('betacandidate.status.change');
        Route::post('/betacustomerfolloup/{id}', [BetaCandidateController::class,'storeFollowup'])->name('betacandidate.customer-followup');
        // Route::get('/followup', [BetaCandidateController::class,'getFollowup'])->name('betacandidate.getFollowup');
        Route::get('/betapush-notification', [BetaCandidateController::class,'pushNotification'])->name('followup.notification');
        Route::get('/betafollowup-other', [BetaCandidateController::class,'getOtherFollowup'])->name('followup.other');

        Route::post('/betacustomernotes', [BetaCandidateController::class,'storeCustomerNotes'])->name('customer-postNotes');
        Route::post('/betaassignToChange', [BetaCandidateController::class,'assignToChange'])->name('betacandidate.assignToChange');
        


        Route::post('/betacandidate/get_documents', [BetaCandidateController::class, 'get_documents'])->name('betacandidate.get_documents');
        Route::post('/betacandidate/delete_documents', [BetaCandidateController::class, 'delete_documents'])->name('betacandidate.delete_documents');
        Route::post('/betacandidate/documents_upload', [BetaCandidateController::class, 'documents_upload'])->name('betacandidate.documents_upload');
        // Route::post('/candidate/replace_document', [BetaCandidateController::class, 'replace_document'])->name('betacandidate.replace_document');
        Route::delete('/betacandidate/multiple/delete', [BetaCandidateController::class, 'multipleDestroy'])->name('betacandidate.multiple.delete');
        Route::post('/betacandidate/passwordUpdate/{id}', [BetaCandidateController::class,'passwordUpdate'])->name('betacandidate.passwordUpdate');

        Route::post('/betacandidate/passwordUpdate/{id}', [BetaCandidateController::class,'passwordUpdate'])->name('betacandidate.passwordUpdate');
        
        //JobCategory Route resource
        Route::resource('jobCategory', JobCategoryController::class)->except('show');

        //job Route resource
        Route::resource('job', JobController::class);
        Route::put('job/change/status/{job}', [JobController::class, 'jobStatusChange'])->name('admin.job.status.change');
        Route::get('job/clone/{job:slug}', [JobController::class, 'clone'])->name('admin.job.clone');
        Route::get('edited/job/list', [JobController::class, 'editedJobList'])->name('admin.job.edited.index');
        Route::get('edited/job/show/{job:slug}', [JobController::class, 'editedShow'])->name('admin.job.edited.show');
        Route::put('edited/job/approved/{job:slug}', [JobController::class, 'editedApproved'])->name('admin.job.edited.approved');

        // job role route resource
        Route::resource('jobRole', JobRoleController::class)->except('show', 'create');

        // industrytype route resource
        Route::resource('industryType', IndustryTypeController::class)->except('show', 'create');

        // profession route resource
        Route::resource('profession', ProfessionController::class)->except('show', 'create');

        // skills route resource
        Route::resource('skill', SkillController::class)->except('show', 'create');

        // benefit route resource
        Route::resource('benefit', BenefitController::class)->except('show', 'create');

        // tags route resource
        Route::resource('tags', TagController::class);
        Route::post('tags/status/change/{tag}', [TagController::class, 'statusChange'])->name('tags.status.change');
        
        
        // sources route resource
        Route::resource('settings/sources', SourcesController::class);
        // Route::post('tags/status/change/{tag}', [TagController::class, 'statusChange'])->name('tags.status.change');

        // About Page
        Route::controller(CmsController::class)->group(function () {
            Route::get('settings/delete/about/logo/{name}', 'aboutLogoDelete')->name('settings.aboutLogo.delete');
            Route::put('settings/about', 'aboutupdate')->name('settings.aboutupdate');
            Route::put('settings/others', 'othersupdate')->name('settings.others.update');
            Route::put('settings/home', 'home')->name('settings.home.update');
            Route::put('settings/contact', 'contact')->name('settings.contact.update');
            Route::put('settings/auth', 'auth')->name('settings.auth.update');
            Route::put('settings/faq', 'faq')->name('settings.faq.update');
            Route::put('settings/errorpages', 'updateErrorPages')->name('settings.errorpage.update');
            Route::put('settings/comingsoon', 'comingsoon')->name('settings.comingsoon.update');

            Route::put('settings/account/complete/update', 'accountCompleteUpdate')->name('settings.account.complate.update');
            Route::put('settings/maintenance/mode/update', 'maintenanceModeUpdate')->name('settings.maintenance.mode.update');
        });

        //Dashboard Route
        Route::controller(AdminController::class)->group(function () {
            Route::get('/',  'dashboard');
            Route::get('/dashboard', 'dashboard')->name('admin.dashboard');
            Route::post('/admin/search', 'search')->name('admin.search');
            Route::post('/admin/download/transaction/invoice/{transaction}', 'downloadTransactionInvoice')->name('admin.transaction.invoice.download');
        });

        //Profile Route
        Route::controller(ProfileController::class)->group(function () {
            Route::get('/profile/settings', 'setting')->name('profile.setting');
            Route::get('/profile', 'profile')->name('profile');
            Route::put('/profile', 'profile_update')->name('profile.update');
        });

        // Order Route
        Route::controller(OrderController::class)->group(function () {
            Route::get('/orders', 'index')->name('order.index');
            Route::get('/orders/{id}', 'show')->name('order.show');
        });

        // ========================================================
        // ====================Setting=============================
        // ========================================================
        // Privacy && Terms Conditions Page
        Route::put('settings/terms/conditions/update', [CmsController::class, 'termsConditionsUpdate'])->name('admin.privacy.terms.update');
        Route::get('settings/websitesetting', [WebsiteSettingController::class, 'website_setting'])->name('settings.websitesetting');
        Route::put('settings/websitesetting', [WebsiteSettingController::class, 'websitesettingupdate'])->name('settings.websitesetting.update');
        Route::post('settings/session/terms-privacy', [WebsiteSettingController::class, 'sessionUpdateTermsPrivacy'])->name('settings.session.update.tems-privacy');
        Route::delete('settings/cms/content', [WebsiteSettingController::class, 'cmsContentDestroy'])->name('settings.cms.content.destroy');

        Route::controller(SettingsController::class)->prefix('settings')->name('settings.')->group(function () {
            Route::get('general', 'general')->name('general');
            Route::put('general', 'generalUpdate')->name('general.update');
            Route::get('layout', 'layout')->name('layout');
            Route::put('layout', 'layoutUpdate')->name('layout.update');
            Route::put('mode', 'modeUpdate')->name('mode.update');
            Route::get('theme', 'theme')->name('theme');
            Route::put('theme', 'colorUpdate')->name('theme.update');
            Route::get('custom', 'custom')->name('custom');
            Route::put('custom', 'custumCSSJSUpdate')->name('custom.update');
            Route::get('email', 'email')->name('email');
            Route::put('email', 'emailUpdate')->name('email.update');
            Route::post('test-email', 'testEmailSent')->name('email.test');

            // Document Category Manager
            Route::get('document_manager', 'document_manager')->name('document_manager');
            Route::get('document_category', 'document_category')->name('document_category');
            Route::get('document_subcategory', 'document_subcategory')->name('document_subcategory');
            
            // sytem update
            Route::get('system', 'system')->name('system');
            Route::put('system/update', 'systemUpdate')->name('system.update');
            Route::put('system/mode/update', 'systemModeUpdate')->name('system.mode.update');
            Route::put('system/jobdeadline/update', 'systemJobdeadlineUpdate')->name('system.jobdeadline.update');

            // sytem update end
            Route::put('search/indexing', 'searchIndexing')->name('search.indexing');
            Route::put('google-analytics', 'googleAnalytics')->name('google.analytics');
            Route::put('allowLangChanging', 'allowLaguageChanage')->name('allow.langChange');
            Route::put('change/timezone', 'timezone')->name('change.timezone');

            // cookies routes
            Route::get('cookies', 'cookies')->name('cookies');
            Route::put('cookies/update', 'cookiesUpdate')->name('cookies.update');

            // seo
            Route::get('seo/index', 'seoIndex')->name('seo.index');
            Route::get('seo/edit/{page}', 'seoEdit')->name('seo.edit');
            Route::put('seo/update/{content}', 'seoUpdate')->name('seo.update');
            Route::get('generate/sitemap', 'generateSitemap')->name('generateSitemap');

            // databse backup end
            Route::put('working-process/update', 'workingProcessUpdate')->name('working.process.update');

            // recaptcha Update
            Route::put('recaptcha/update', 'recaptchaUpdate')->name('recaptcha.update');

            // analytics Update
            Route::put('analytics/update', 'analyticsUpdate')->name('analytics.update');

            // indexing Update
            Route::put('indexing/update', 'indexingUpdate')->name('indexing.update');

            // payperjob Update
            Route::put('payperjob/update', 'payperjobUpdate')->name('payperjob.update');

            // upgrade application
            Route::get('upgrade', 'upgrade')->name('upgrade');
            Route::post('upgrade/apply', 'upgradeApply')->name('upgrade.apply');
        });

        Route::controller(AffiliateSettingsController::class)->prefix('settings/affiliate')->name('settings.')->group(function () {
            Route::get('/', 'index')->name('affiliate.index');
            Route::put('careerjet/update', 'careerjetUpdate')->name('careerjet.update');
            Route::put('indeed/update', 'indeedUpdate')->name('indeed.update');
        });

        Route::group(["prefix" => "settings/email-templates", "as" => "settings.email-templates."], function () {
            Route::get("/", [EmailTemplateController::class, "index"])->name("list");
            Route::post("/save", [EmailTemplateController::class, "save"])->name("save");
        });

        Route::controller(SocialiteController::class)->group(function () {
            Route::get('settings/social-login', 'index')->name('settings.social.login');
            Route::put('settings/social-login', 'update')->name('settings.social.login.update');
            Route::post('settings/social-login/status', 'updateStatus')->name('settings.social.login.status.update');
        });

        Route::controller(PaymentController::class)->prefix('settings/payment')->name('settings.')->group(function () {
            // Automatic Payment
            Route::get('/auto', 'autoPayment')->name('payment');
            Route::put('/', 'update')->name('payment.update');

            // Manual Payment
            Route::get('/manual', 'manualPayment')->name('payment.manual');
            Route::post('/manual/store', 'manualPaymentStore')->name('payment.manual.store');
            Route::get('/manual/{manual_payment}/edit', 'manualPaymentEdit')->name('payment.manual.edit');
            Route::put('/manual/{manual_payment}/update', 'manualPaymentUpdate')->name('payment.manual.update');
            Route::delete('/manual/{manual_payment}/delete', 'manualPaymentDelete')->name('payment.manual.delete');
            Route::get('/manual/status/change', 'manualPaymentStatus')->name('payment.manual.status');
        });
        // candidate language
        Route::resource('candidate/language/index', CandidateLanguageController::class, ['names' => 'admin.candidate.language']);

            // address CRUD
    Route::prefix('address')->group(function () {
        Route::get('/', [AddressController::class, 'index'])->name('address.index');
        Route::get('create', [AddressController::class, 'create'])->name('address.create');
        Route::post('store', [AddressController::class, 'store'])->name('address.store');
        Route::get('edit/{address}', [AddressController::class, 'edit'])->name('address.edit');
        Route::put('update/{address}', [AddressController::class, 'update'])->name('address.update');
        Route::delete('delete/{address}', [AddressController::class, 'destroy'])->name('address.delete');
        Route::delete('multiple/delete', [AddressController::class, 'multipleDestroy'])->name('address.multiple.delete');
        Route::post('/set/app/address', [AddressController::class, 'setAppAddress'])->name('set.app.address');
    });

    Route::prefix('seosetting')->group(function () {
        Route::get('/', [SeoSettingsController::class, 'index'])->name('seosetting.index');
        Route::put('update/{seosetting}', [SeoSettingsController::class, 'update'])->name('seosetting.update');
    });
    
    Route::resource('intake', IntakeController::class);//intake

    });
});
