<?php

use App\Http\Controllers\DashboardController;
use App\Http\Controllers\DirectoryController;
use App\Http\Controllers\EmailTemplateController;
use App\Http\Controllers\EmailNotificationController;
use App\Http\Controllers\NotificationTemplateController;
use App\Http\Controllers\PermissionController;
use App\Http\Controllers\PlanController;
use App\Http\Controllers\PlanOrderController;
use App\Http\Controllers\PlanRequestController;
use App\Http\Controllers\RoleController;
use App\Http\Controllers\ReferralController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\UserLogController;
use App\Http\Controllers\CompanyController;
use App\Http\Controllers\CouponController;
use App\Http\Controllers\CurrencyController;
use App\Http\Controllers\ImpersonateController;
use App\Http\Controllers\TranslationController;
use App\Http\Controllers\LandingPageController;
use App\Http\Controllers\LandingPage\CustomPageController;
use App\Http\Controllers\LanguageController;
use App\Http\Controllers\MediaController;
use App\Http\Controllers\RazorpayController;
use App\Http\Controllers\MercadoPagoController;
use App\Http\Controllers\StripePaymentController;
use App\Http\Controllers\PayPalPaymentController;
use App\Http\Controllers\BankPaymentController;
use App\Http\Controllers\PaystackPaymentController;
use App\Http\Controllers\FlutterwavePaymentController;
use App\Http\Controllers\PayTabsPaymentController;
use App\Http\Controllers\SkrillPaymentController;
use App\Http\Controllers\CoinGatePaymentController;
use App\Http\Controllers\PayfastPaymentController;
use App\Http\Controllers\TapPaymentController;
use App\Http\Controllers\XenditPaymentController;
use App\Http\Controllers\PayTRPaymentController;
use App\Http\Controllers\MolliePaymentController;
use App\Http\Controllers\ToyyibPayPaymentController;
use App\Http\Controllers\CashfreeController;
use App\Http\Controllers\IyzipayPaymentController;
use App\Http\Controllers\BenefitPaymentController;
use App\Http\Controllers\OzowPaymentController;
use App\Http\Controllers\EasebuzzPaymentController;
use App\Http\Controllers\KhaltiPaymentController;
use App\Http\Controllers\AuthorizeNetPaymentController;
use App\Http\Controllers\FedaPayPaymentController;
use App\Http\Controllers\PayHerePaymentController;
use App\Http\Controllers\CinetPayPaymentController;
use App\Http\Controllers\PaiementPaymentController;
use App\Http\Controllers\NepalstePaymentController;
use App\Http\Controllers\YooKassaPaymentController;
use App\Http\Controllers\AamarpayPaymentController;
use App\Http\Controllers\MidtransPaymentController;

use App\Http\Controllers\PublicFormController;
use App\Http\Controllers\TaskStageController;
use App\Http\Controllers\ProjectController;
use App\Http\Controllers\ProjectMilestoneController;
use App\Http\Controllers\ProjectNoteController;
use App\Http\Controllers\ProjectExpenseController;
use App\Http\Controllers\ProjectFileController;
use App\Http\Controllers\TaskController;
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;

// Installation mode selection (only if not installed)
Route::middleware('canInstall')->group(function () {
    Route::get('/setup', [\App\Http\Controllers\InstallationModeController::class, 'showModeSelection'])->name('installation.mode');
    Route::post('/setup/mode', [\App\Http\Controllers\InstallationModeController::class, 'setMode'])->name('installation.set-mode');
});

Route::get('/', [LandingPageController::class, 'show'])->middleware('redirect.setup')->name('home');
Route::get('/directory', [DirectoryController::class, 'index'])->name('directory.index');

// Public invoice view
Route::get('/invoice/{invoice}', [\App\Http\Controllers\InvoiceController::class, 'publicView'])->name('invoices.public');

// Public contract view
Route::get('/contract/{contract}', [\App\Http\Controllers\ContractController::class, 'publicView'])->name('contracts.public');
Route::put('/contract/{contract}/send', [\App\Http\Controllers\ContractController::class, 'sendContractPublic'])->name('contracts.send-public');

// Public invoice payment routes
Route::get('/api/invoice-payment-settings/{invoice}', [\App\Http\Controllers\InvoicePaymentController::class, 'getPaymentSettings']);
Route::post('/api/invoice-payment/{invoice}', [\App\Http\Controllers\InvoicePaymentController::class, 'processPayment']);
Route::post('/api/invoice-payment/stripe/{invoice}', [\App\Http\Controllers\InvoicePaymentController::class, 'processStripePayment']);
Route::post('/api/invoice-payment/paypal/{invoice}', [\App\Http\Controllers\InvoicePaymentController::class, 'processPayPalPayment']);


// Public form submission routes

// Cashfree webhook (public route)
Route::post('cashfree/webhook', [CashfreeController::class, 'webhook'])->name('cashfree.webhook');
Route::get('cashfree/success', [CashfreeController::class, 'success'])->name('cashfree.success');

// Benefit webhook (public route)
Route::post('benefit/webhook', [BenefitPaymentController::class, 'webhook'])->name('benefit.webhook');
Route::get('payments/benefit/success', [BenefitPaymentController::class, 'success'])->name('benefit.success');
Route::post('payments/benefit/callback', [BenefitPaymentController::class, 'callback'])->name('benefit.callback');

// FedaPay callback (public route)
Route::match(['GET', 'POST'], 'payments/fedapay/callback', [FedaPayPaymentController::class, 'callback'])->name('fedapay.callback');

// YooKassa success/callback (public routes)
Route::get('payments/yookassa/success', [YooKassaPaymentController::class, 'success'])->name('yookassa.success');
Route::post('payments/yookassa/callback', [YooKassaPaymentController::class, 'callback'])->name('yookassa.callback');

// Nepalste success/callback (public routes)
Route::get('payments/nepalste/success', [NepalstePaymentController::class, 'success'])->name('nepalste.success');
Route::post('payments/nepalste/callback', [NepalstePaymentController::class, 'callback'])->name('nepalste.callback');

// PayTR callback (public route)
Route::post('payments/paytr/callback', [PayTRPaymentController::class, 'callback'])->name('paytr.callback');

// PayTabs callback (public route)
Route::match(['GET', 'POST'], 'payments/paytabs/callback', [PayTabsPaymentController::class, 'callback'])->name('paytabs.callback');
Route::get('payments/paytabs/success', [PayTabsPaymentController::class, 'success'])->name('paytabs.success');

// Tap payment routes (public routes)
Route::get('payments/tap/success', [TapPaymentController::class, 'success'])->name('tap.success');
Route::post('payments/tap/callback', [TapPaymentController::class, 'callback'])->name('tap.callback');

// Aamarpay payment routes (public routes)
Route::match(['GET', 'POST'], 'payments/aamarpay/success', [AamarpayPaymentController::class, 'success'])->name('aamarpay.success');



// Flutterwave callback (public route)
Route::get('payments/flutterwave/success', [FlutterwavePaymentController::class, 'success'])->name('flutterwave.success.public');
Route::post('payments/flutterwave/callback', [FlutterwavePaymentController::class, 'callback'])->name('flutterwave.callback.public');

// PayFast payment routes (public routes)
Route::get('payments/payfast/success', [PayfastPaymentController::class, 'success'])->name('payfast.success');
Route::post('payments/payfast/callback', [PayfastPaymentController::class, 'callback'])->name('payfast.callback');

// CoinGate callback (public route)
Route::match(['GET', 'POST'], 'payments/coingate/callback', [CoinGatePaymentController::class, 'callback'])->name('coingate.callback');
Route::get('payments/coingate/success', [CoinGatePaymentController::class, 'success'])->name('coingate.success');

// Xendit payment routes (public routes)
Route::get('payments/xendit/success', [XenditPaymentController::class, 'success'])->name('xendit.success');
Route::post('payments/xendit/callback', [XenditPaymentController::class, 'callback'])->name('xendit.callback');

// Ozow payment routes (public routes)
Route::get('payments/ozow/success', [OzowPaymentController::class, 'success'])->name('ozow.success');
Route::post('payments/ozow/callback', [OzowPaymentController::class, 'callback'])->name('ozow.callback');

// Iyzipay success/callback (public routes)
Route::match(['GET', 'POST'], 'payments/iyzipay/success', [IyzipayPaymentController::class, 'success'])->name('iyzipay.success');
// Route::post('payments/iyzipay/callback', [IyzipayPaymentController::class, 'callback'])->name('iyzipay.callback');

// PWA Manifest routes removed

Route::get('/landing-page', [LandingPageController::class, 'settings'])->name('landing-page');
Route::post('/landing-page/contact', [\App\Http\Controllers\ContactController::class, 'store'])->name('landing-page.contact');
Route::post('/landing-page/subscribe', [LandingPageController::class, 'subscribe'])->name('landing-page.subscribe');
Route::get('/page/{slug}', [CustomPageController::class, 'show'])->name('custom-page.show');

Route::get('/translations/{locale}', [TranslationController::class, 'getTranslations'])->name('translations');
Route::get('/refresh-language/{locale}', [TranslationController::class, 'refreshLanguage'])->name('refresh-language');
Route::get('/initial-locale', [TranslationController::class, 'getInitialLocale'])->name('initial-locale');
Route::post('/change-language', [\App\Http\Controllers\LanguageChangeController::class, 'changeLanguage'])->name('change-language');

// Cookie Consent (public routes - no auth required)
Route::post('cookie-consent', [\App\Http\Controllers\CookieConsentController::class, 'store'])->name('cookie.consent.store');
Route::get('cookie-consent/download', [\App\Http\Controllers\CookieConsentController::class, 'download'])->name('cookie.consent.download');


// SuperAdmin Email Templates routes (no plan check needed)
Route::middleware(['auth', 'verified'])->group(function () {
    // Route::prefix('superadmin')->group(function () {
        Route::get('email-templates', [\App\Http\Controllers\SuperAdmin\EmailTemplateController::class, 'index'])->middleware('permission:manage-email-templates')->name('superadmin.email-templates.index');
        Route::get('email-templates/{id}', [\App\Http\Controllers\SuperAdmin\EmailTemplateController::class, 'show'])->middleware('permission:view-email-templates')->name('superadmin.email-templates.show');
        Route::post('email-templates', [\App\Http\Controllers\SuperAdmin\EmailTemplateController::class, 'store'])->middleware('permission:create-email-templates')->name('superadmin.email-templates.store');
        Route::put('email-templates/{emailTemplate}', [\App\Http\Controllers\SuperAdmin\EmailTemplateController::class, 'update'])->middleware('permission:edit-email-templates')->name('superadmin.email-templates.update');
        Route::put('email-templates/{emailTemplate}/settings', [\App\Http\Controllers\SuperAdmin\EmailTemplateController::class, 'updateSettings'])->middleware('permission:edit-email-templates')->name('superadmin.email-templates.update-settings');
        Route::put('email-templates/{emailTemplate}/content', [\App\Http\Controllers\SuperAdmin\EmailTemplateController::class, 'updateContent'])->middleware('permission:edit-email-templates')->name('superadmin.email-templates.update-content');
        Route::delete('email-templates/{emailTemplate}', [\App\Http\Controllers\SuperAdmin\EmailTemplateController::class, 'destroy'])->middleware('permission:delete-email-templates')->name('superadmin.email-templates.destroy');
    // });
});



Route::middleware(['auth', 'verified'])->group(function () {
    // Plans routes - accessible without plan check but only in SaaS mode
    Route::middleware(['saas.mode:saas'])->group(function () {
        Route::get('plans', [PlanController::class, 'index'])->name('plans.index');
        Route::post('plans/request', [PlanController::class, 'requestPlan'])->name('plans.request');
        Route::post('plans/cancel-request', [PlanController::class, 'cancelPlanRequest'])->name('plans.cancel-request');
        Route::post('plans/trial', [PlanController::class, 'startTrial'])->name('plans.trial');
        Route::post('plans/subscribe', [PlanController::class, 'subscribe'])->name('plans.subscribe');
        Route::post('plans/coupons/validate', [CouponController::class, 'validate'])->name('coupons.validate');
    });

    // Payment routes - accessible without plan check
    Route::post('payments/stripe', [StripePaymentController::class, 'processPayment'])->name('stripe.payment');
    Route::post('payments/paypal', [PayPalPaymentController::class, 'processPayment'])->name('paypal.payment');
    Route::post('payments/bank', [BankPaymentController::class, 'processPayment'])->name('bank.payment');
    Route::post('payments/paystack', [PaystackPaymentController::class, 'processPayment'])->name('paystack.payment');
    Route::post('payments/flutterwave', [FlutterwavePaymentController::class, 'processPayment'])->name('flutterwave.payment');
    Route::get('payments/flutterwave/success', [FlutterwavePaymentController::class, 'success'])->name('flutterwave.success');
    Route::post('payments/flutterwave/callback', [FlutterwavePaymentController::class, 'callback'])->name('flutterwave.callback');
    Route::post('payments/paytabs', [PayTabsPaymentController::class, 'processPayment'])->name('paytabs.payment');
    Route::post('payments/skrill', [SkrillPaymentController::class, 'processPayment'])->name('skrill.payment');
    Route::post('payments/coingate', [CoinGatePaymentController::class, 'processPayment'])->name('coingate.payment');
    Route::post('payments/payfast', [PayfastPaymentController::class, 'processPayment'])->name('payfast.payment');
    Route::post('payments/mollie', [MolliePaymentController::class, 'processPayment'])->name('mollie.payment');
    Route::post('payments/toyyibpay', [ToyyibPayPaymentController::class, 'processPayment'])->name('toyyibpay.payment');

    Route::post('payments/benefit', [BenefitPaymentController::class, 'processPayment'])->name('benefit.payment');
    Route::post('payments/ozow', [OzowPaymentController::class, 'processPayment'])->name('ozow.payment');
    Route::post('payments/easebuzz', [EasebuzzPaymentController::class, 'processPayment'])->name('easebuzz.payment');
    Route::post('payments/khalti', [KhaltiPaymentController::class, 'processPayment'])->name('khalti.payment');
    Route::post('payments/authorizenet', [AuthorizeNetPaymentController::class, 'processPayment'])->name('authorizenet.payment');
    Route::post('payments/fedapay', [FedaPayPaymentController::class, 'processPayment'])->name('fedapay.payment');
    Route::post('payments/payhere', [PayHerePaymentController::class, 'processPayment'])->name('payhere.payment');
    Route::post('payments/cinetpay', [CinetPayPaymentController::class, 'processPayment'])->name('cinetpay.payment');
    Route::post('payments/paiement', [PaiementPaymentController::class, 'processPayment'])->name('paiement.payment');
    Route::post('payments/nepalste', [NepalstePaymentController::class, 'processPayment'])->name('nepalste.payment');
    Route::post('payments/yookassa', [YooKassaPaymentController::class, 'processPayment'])->name('yookassa.payment');
    Route::post('payments/aamarpay', [AamarpayPaymentController::class, 'processPayment'])->name('aamarpay.payment');
    Route::post('payments/midtrans', [MidtransPaymentController::class, 'processPayment'])->name('midtrans.payment');

    Route::post('payments/cashfree', [CashfreeController::class, 'processPayment'])->name('cashfree.payment');

    // Payment gateway specific routes
    Route::post('razorpay/create-order', [RazorpayController::class, 'createOrder'])->name('razorpay.create-order');
    Route::post('razorpay/verify-payment', [RazorpayController::class, 'verifyPayment'])->name('razorpay.verify-payment');
    Route::post('cashfree/create-session', [CashfreeController::class, 'createPaymentSession'])->name('cashfree.create-session');
    Route::post('mercadopago/create-preference', [MercadoPagoController::class, 'createPreference'])->name('mercadopago.create-preference');
    Route::post('mercadopago/process-payment', [MercadoPagoController::class, 'processPayment'])->name('mercadopago.process-payment');

    // Other payment creation routes
    Route::post('tap/create-payment', [TapPaymentController::class, 'createPayment'])->name('tap.create-payment');
    Route::post('xendit/create-payment', [XenditPaymentController::class, 'createPayment'])->name('xendit.create-payment');
    Route::post('payments/paytr/create-token', [PayTRPaymentController::class, 'createPaymentToken'])->name('paytr.create-token');
    Route::post('payments/iyzipay', [IyzipayPaymentController::class, 'createPaymentForm'])->name('iyzipay.payment');


    Route::post('benefit/create-session', [BenefitPaymentController::class, 'createPaymentSession'])->name('benefit.create-session');
    Route::post('ozow/create-payment', [OzowPaymentController::class, 'createPayment'])->name('ozow.create-payment');
    Route::post('easebuzz/create-payment', [EasebuzzPaymentController::class, 'createPayment'])->name('easebuzz.create-payment');
    Route::post('khalti/create-payment', [KhaltiPaymentController::class, 'createPayment'])->name('khalti.create-payment');
    Route::post('authorizenet/create-form', [AuthorizeNetPaymentController::class, 'createPaymentForm'])->name('authorizenet.create-form');
    Route::post('fedapay/create-payment', [FedaPayPaymentController::class, 'createPayment'])->name('fedapay.create-payment');
    Route::post('payhere/create-payment', [PayHerePaymentController::class, 'createPayment'])->name('payhere.create-payment');
    Route::post('cinetpay/create-payment', [CinetPayPaymentController::class, 'createPayment'])->name('cinetpay.create-payment');
    Route::post('paiement/create-payment', [PaiementPaymentController::class, 'createPayment'])->name('paiement.create-payment');
    Route::post('nepalste/create-payment', [NepalstePaymentController::class, 'createPayment'])->name('nepalste.create-payment');
    Route::post('yookassa/create-payment', [YooKassaPaymentController::class, 'createPayment'])->name('yookassa.create-payment');
    Route::post('aamarpay/create-payment', [AamarpayPaymentController::class, 'createPayment'])->name('aamarpay.create-payment');
    Route::post('midtrans/create-payment', [MidtransPaymentController::class, 'createPayment'])->name('midtrans.create-payment');


    // Payment success/callback routes
    Route::post('payments/skrill/callback', [SkrillPaymentController::class, 'callback'])->name('skrill.callback');
    Route::get('payments/paytr/success', [PayTRPaymentController::class, 'success'])->name('paytr.success');
    Route::get('payments/paytr/failure', [PayTRPaymentController::class, 'failure'])->name('paytr.failure');
    Route::get('payments/mollie/success', [MolliePaymentController::class, 'success'])->name('mollie.success');
    Route::post('payments/mollie/callback', [MolliePaymentController::class, 'callback'])->name('mollie.callback');
    Route::match(['GET', 'POST'], 'payments/toyyibpay/success', [ToyyibPayPaymentController::class, 'success'])->name('toyyibpay.success');
    Route::post('payments/toyyibpay/callback', [ToyyibPayPaymentController::class, 'callback'])->name('toyyibpay.callback');

    Route::get('payments/payhere/success', [PayHerePaymentController::class, 'success'])->name('payhere.success');
    Route::post('payments/payhere/callback', [PayHerePaymentController::class, 'callback'])->name('payhere.callback');
    Route::get('payments/cinetpay/success', [CinetPayPaymentController::class, 'success'])->name('cinetpay.success');
    Route::post('payments/cinetpay/callback', [CinetPayPaymentController::class, 'callback'])->name('cinetpay.callback');
    Route::get('payments/paiement/success', [PaiementPaymentController::class, 'success'])->name('paiement.success');
    Route::post('payments/paiement/callback', [PaiementPaymentController::class, 'callback'])->name('paiement.callback');
    Route::post('payments/midtrans/callback', [MidtransPaymentController::class, 'callback'])->name('midtrans.callback');


    Route::get('mercadopago/success', [MercadoPagoController::class, 'success'])->name('mercadopago.success');
    Route::get('mercadopago/failure', [MercadoPagoController::class, 'failure'])->name('mercadopago.failure');
    Route::get('mercadopago/pending', [MercadoPagoController::class, 'pending'])->name('mercadopago.pending');
    Route::post('mercadopago/embedded-success', [MercadoPagoController::class, 'embeddedSuccess'])->name('mercadopago.embedded-success');
    Route::post('mercadopago/webhook', [MercadoPagoController::class, 'webhook'])->name('mercadopago.webhook');
    Route::post('authorizenet/test-connection', [AuthorizeNetPaymentController::class, 'testConnection'])->name('authorizenet.test-connection');

    // Email Template routes (SuperAdmin only)
    // Company users access via settings page

    // Email Notification Settings
    Route::put('email-notifications', [EmailNotificationController::class, 'update'])->name('email-notifications.update');
    Route::get('api/email-notification-templates', [\App\Http\Controllers\EmailNotificationSettingsController::class, 'getAvailableTemplates'])->name('api.email-notification-templates');

    // Test Email
    Route::post('test-email', [\App\Http\Controllers\TestEmailController::class, 'send'])->name('test-email.send');



    Route::middleware('plan.access')->group(function () {
        // Notification Template routes
        Route::get('notification-templates', [NotificationTemplateController::class, 'index'])->name('notification-templates.index');
        Route::get('notification-templates/{template}', [NotificationTemplateController::class, 'show'])->name('notification-templates.show');
        Route::put('notification-templates/{template}/settings', [NotificationTemplateController::class, 'updateSettings'])->name('notification-templates.update-settings');
        Route::put('notification-templates/{template}/content', [NotificationTemplateController::class, 'updateContent'])->name('notification-templates.update-content');
        Route::get('api/notification-templates/types', [NotificationTemplateController::class, 'getAvailableTypes'])->name('api.notification-templates.types');
    });

    // Contact Management routes (Super Admin and Company in non-SaaS mode)
    Route::middleware('permission:manage-contacts')->group(function () {
        Route::get('contacts', [\App\Http\Controllers\ContactController::class, 'index'])->name('contacts.index');
        Route::get('contacts/{contact}', [\App\Http\Controllers\ContactController::class, 'show'])->name('contacts.show');
        Route::delete('contacts/{contact}', [\App\Http\Controllers\ContactController::class, 'destroy'])->name('contacts.destroy');

    });

    // Newsletter Management routes (Super Admin and Company in non-SaaS mode)
    Route::middleware('permission:manage-newsletters')->group(function () {
        Route::get('newsletters', [\App\Http\Controllers\NewsletterController::class, 'index'])->name('newsletters.index');
        Route::delete('newsletters/{newsletter}', [\App\Http\Controllers\NewsletterController::class, 'destroy'])->name('newsletters.destroy');
        Route::put('newsletters/{newsletter}/toggle-status', [\App\Http\Controllers\NewsletterController::class, 'toggleStatus'])->name('newsletters.toggle-status');
    });



    // All other routes require plan access check
    Route::middleware('plan.access')->group(function () {
        Route::get('dashboard', [DashboardController::class, 'index'])->name('dashboard');
        Route::get('dashboard/redirect', [DashboardController::class, 'redirectToFirstAvailablePage'])->name('dashboard.redirect');

        Route::get('media-library', function () {
            return Inertia::render('media-library');
        })->name('media-library');



        // Media Library API routes
        Route::get('api/media', [MediaController::class, 'index'])->middleware('permission:manage-media')->name('api.media.index');
        Route::post('api/media/batch', [MediaController::class, 'batchStore'])->middleware('permission:create-media')->name('api.media.batch');
        Route::get('api/media/{id}/download', [MediaController::class, 'download'])->middleware('permission:download-media')->name('api.media.download');
        Route::delete('api/media/{id}', [MediaController::class, 'destroy'])->middleware('permission:delete-media')->name('api.media.destroy');

        // Permissions routes with granular permissions
        Route::middleware('permission:manage-permissions')->group(function () {
            Route::get('permissions', [PermissionController::class, 'index'])->middleware('permission:manage-permissions')->name('permissions.index');
            Route::get('permissions/create', [PermissionController::class, 'create'])->middleware('permission:create-permissions')->name('permissions.create');
            Route::post('permissions', [PermissionController::class, 'store'])->middleware('permission:create-permissions')->name('permissions.store');
            Route::get('permissions/{permission}', [PermissionController::class, 'show'])->middleware('permission:view-permissions')->name('permissions.show');
            Route::get('permissions/{permission}/edit', [PermissionController::class, 'edit'])->middleware('permission:edit-permissions')->name('permissions.edit');
            Route::put('permissions/{permission}', [PermissionController::class, 'update'])->middleware('permission:edit-permissions')->name('permissions.update');
            Route::patch('permissions/{permission}', [PermissionController::class, 'update'])->middleware('permission:edit-permissions');
            Route::delete('permissions/{permission}', [PermissionController::class, 'destroy'])->middleware('permission:delete-permissions')->name('permissions.destroy');
        });

        // Roles routes with granular permissions
        Route::middleware('permission:manage-roles')->group(function () {
            Route::get('roles', [RoleController::class, 'index'])->middleware('permission:manage-roles')->name('roles.index');
            Route::get('roles/create', [RoleController::class, 'create'])->middleware('permission:create-roles')->name('roles.create');
            Route::post('roles', [RoleController::class, 'store'])->middleware('permission:create-roles')->name('roles.store');
            Route::get('roles/{role}', [RoleController::class, 'show'])->middleware('permission:view-roles')->name('roles.show');
            Route::get('roles/{role}/edit', [RoleController::class, 'edit'])->middleware('permission:edit-roles')->name('roles.edit');
            Route::put('roles/{role}', [RoleController::class, 'update'])->middleware('permission:edit-roles')->name('roles.update');
            Route::patch('roles/{role}', [RoleController::class, 'update'])->middleware('permission:edit-roles');
            Route::delete('roles/{role}', [RoleController::class, 'destroy'])->middleware('permission:delete-roles')->name('roles.destroy');
        });

        // Users routes with granular permissions
        Route::middleware('permission:manage-users')->group(function () {
            Route::get('users', [UserController::class, 'index'])->middleware('permission:manage-users')->name('users.index');
            Route::get('users/create', [UserController::class, 'create'])->middleware('permission:create-users')->name('users.create');
            Route::post('users', [UserController::class, 'store'])->middleware('permission:create-users')->name('users.store');
            Route::get('users/{user}', [UserController::class, 'show'])->middleware('permission:view-users')->name('users.show');
            Route::get('users/{user}/edit', [UserController::class, 'edit'])->middleware('permission:edit-users')->name('users.edit');
            Route::put('users/{user}', [UserController::class, 'update'])->middleware('permission:edit-users')->name('users.update');
            Route::patch('users/{user}', [UserController::class, 'update'])->middleware('permission:edit-users');
            Route::delete('users/{user}', [UserController::class, 'destroy'])->middleware('permission:delete-users')->name('users.destroy');

            // Additional user routes
            Route::put('users/{user}/reset-password', [UserController::class, 'resetPassword'])->middleware('permission:reset-password-users')->name('users.reset-password');
            Route::put('users/{user}/toggle-status', [UserController::class, 'toggleStatus'])->middleware('permission:toggle-status-users')->name('users.toggle-status');
        });

        // Plans management routes (admin only) - SaaS mode only
        Route::middleware(['permission:manage-plans', 'saas.mode:saas'])->group(function () {
            Route::get('plans/create', [PlanController::class, 'create'])->middleware('permission:create-plans')->name('plans.create');
            Route::post('plans', [PlanController::class, 'store'])->middleware('permission:create-plans')->name('plans.store');
            Route::get('plans/{plan}/edit', [PlanController::class, 'edit'])->middleware('permission:edit-plans')->name('plans.edit');
            Route::put('plans/{plan}', [PlanController::class, 'update'])->middleware('permission:edit-plans')->name('plans.update');
            Route::delete('plans/{plan}', [PlanController::class, 'destroy'])->middleware('permission:delete-plans')->name('plans.destroy');
            Route::post('plans/{plan}/toggle-status', [PlanController::class, 'toggleStatus'])->name('plans.toggle-status');
        });

        // Plan Orders routes
        Route::get('plan-orders', [PlanOrderController::class, 'index'])->middleware('permission:view-plan-orders')->name('plan-orders.index');
        Route::get('plan-orders/{planOrder}', [PlanOrderController::class, 'show'])->middleware('permission:view-plan-orders')->name('plan-orders.show');
        Route::post('plan-orders/{planOrder}/approve', [PlanOrderController::class, 'approve'])->middleware('permission:approve-plan-orders')->name('plan-orders.approve');
        Route::post('plan-orders/{planOrder}/reject', [PlanOrderController::class, 'reject'])->middleware('permission:reject-plan-orders')->name('plan-orders.reject');

        // Plan Requests routes
        Route::get('plan-requests', [PlanRequestController::class, 'index'])->middleware('permission:view-plan-requests')->name('plan-requests.index');

        // Companies routes
        Route::middleware('permission:manage-companies')->group(function () {
            Route::get('companies', [CompanyController::class, 'index'])->middleware('permission:manage-companies')->name('companies.index');
            Route::post('companies', [CompanyController::class, 'store'])->middleware('permission:create-companies')->name('companies.store');
            Route::put('companies/{company}', [CompanyController::class, 'update'])->middleware('permission:edit-companies')->name('companies.update');
            Route::delete('companies/{company}', [CompanyController::class, 'destroy'])->middleware('permission:delete-companies')->name('companies.destroy');
            Route::put('companies/{company}/reset-password', [CompanyController::class, 'resetPassword'])->middleware('permission:reset-password-companies')->name('companies.reset-password');
            Route::put('companies/{company}/toggle-status', [CompanyController::class, 'toggleStatus'])->middleware('permission:toggle-status-companies')->name('companies.toggle-status');
            Route::get('companies/{company}/plans', [CompanyController::class, 'getPlans'])->middleware('permission:manage-plans-companies')->name('companies.plans');
            Route::put('companies/{company}/upgrade-plan', [CompanyController::class, 'upgradePlan'])->middleware('permission:upgrade-plan-companies')->name('companies.upgrade-plan');
        });

        // User Logs routes
        Route::get('companies/user-logs', [\App\Http\Controllers\UserLogController::class, 'index'])->name('user-logs.index');
        Route::delete('user-logs/{log}', [\App\Http\Controllers\UserLogController::class, 'destroy'])->name('user-logs.destroy');


        // Coupons routes - SaaS mode only
        Route::middleware(['permission:manage-coupons', 'saas.mode:saas'])->group(function () {
            Route::get('coupons', [CouponController::class, 'index'])->middleware('permission:manage-coupons')->name('coupons.index');
            Route::get('coupons/{coupon}', [CouponController::class, 'show'])->middleware('permission:view-coupons')->name('coupons.show');
            Route::post('coupons', [CouponController::class, 'store'])->middleware('permission:create-coupons')->name('coupons.store');
            Route::put('coupons/{coupon}', [CouponController::class, 'update'])->middleware('permission:edit-coupons')->name('coupons.update');
            Route::put('coupons/{coupon}/toggle-status', [CouponController::class, 'toggleStatus'])->middleware('permission:toggle-status-coupons')->name('coupons.toggle-status');
            Route::delete('coupons/{coupon}', [CouponController::class, 'destroy'])->middleware('permission:delete-coupons')->name('coupons.destroy');
        });

        // Plan Request management (admin only)
        Route::post('plan-requests/{planRequest}/approve', [PlanRequestController::class, 'approve'])->middleware('permission:approve-plan-requests')->name('plan-requests.approve');
        Route::post('plan-requests/{planRequest}/reject', [PlanRequestController::class, 'reject'])->middleware('permission:reject-plan-requests')->name('plan-requests.reject');

        // Plan Request creation (accessible to all authenticated users)
        Route::get('plan-request/create', [PlanRequestController::class, 'create'])->name('plan-request.create');
        Route::post('plan-request', [PlanRequestController::class, 'store'])->name('plan-request.store');



        // Referral routes - SaaS mode only
        Route::middleware(['permission:manage-referral', 'saas.mode:saas'])->group(function () {
            Route::get('referral', [ReferralController::class, 'index'])->middleware('permission:manage-referral')->name('referral.index');
            Route::get('referral/referred-users', [ReferralController::class, 'getReferredUsers'])->middleware('permission:manage-users-referral')->name('referral.referred-users');
            Route::post('referral/settings', [ReferralController::class, 'updateSettings'])->middleware('permission:manage-setting-referral')->name('referral.settings.update');
            Route::post('referral/payout-request', [ReferralController::class, 'createPayoutRequest'])->middleware('permission:manage-payout-referral')->name('referral.payout-request.create');
            Route::post('referral/payout-request/{payoutRequest}/approve', [ReferralController::class, 'approvePayoutRequest'])->middleware('permission:approve-payout-referral')->name('referral.payout-request.approve');
            Route::post('referral/payout-request/{payoutRequest}/reject', [ReferralController::class, 'rejectPayoutRequest'])->middleware('permission:reject-payout-referral')->name('referral.payout-request.reject');
        });

        // Currencies routes
        Route::middleware('permission:manage-currencies')->group(function () {
            Route::get('currencies', [CurrencyController::class, 'index'])->middleware('permission:manage-currencies')->name('currencies.index');
            Route::post('currencies', [CurrencyController::class, 'store'])->middleware('permission:create-currencies')->name('currencies.store');
            Route::put('currencies/{currency}', [CurrencyController::class, 'update'])->middleware('permission:edit-currencies')->name('currencies.update');
            Route::delete('currencies/{currency}', [CurrencyController::class, 'destroy'])->middleware('permission:delete-currencies')->name('currencies.destroy');
        });

        // ChatGPT routes
        Route::match(['POST', 'PATCH'],'api/chatgpt/generate', [\App\Http\Controllers\ChatGptController::class, 'generate'])->name('chatgpt.generate');
        // Route::post('api/chatgpt/generate', [\App\Http\Controllers\ChatGptController::class, 'generate'])->name('chatgpt.generate');

        // Language management
        Route::get('manage-language/{lang?}', [LanguageController::class, 'managePage'])->middleware('permission:manage-language')->name('manage-language');
        Route::get('language/load', [LanguageController::class, 'load'])->name('language.load');
        Route::match(['POST', 'PATCH'], 'language/save', [LanguageController::class, 'save'])->middleware('permission:edit-language')->name('language.save');
        Route::post('languages/create', [LanguageController::class, 'createLanguage'])->middleware('permission:create-language')->name('languages.create');
        Route::delete('languages/{languageCode}', [LanguageController::class, 'deleteLanguage'])->middleware('permission:delete-language')->name('languages.delete');
        Route::patch('languages/{languageCode}/toggle', [LanguageController::class, 'toggleLanguageStatus'])->middleware('permission:edit-language')->name('languages.toggle');

        // Landing Page content management (Super Admin only in SaaS mode, Company accessible in non-SaaS mode)
        Route::middleware(['landing.access'])->group(function () {
            Route::get('landing-page/settings', [LandingPageController::class, 'settings'])->name('landing-page.settings');
            Route::post('landing-page/settings', [LandingPageController::class, 'updateSettings'])->name('landing-page.settings.update');

            Route::resource('custom-pages', CustomPageController::class)->names([
                'index' => 'landing-page.custom-pages.index',
                'create' => 'landing-page.custom-pages.create',
                'store' => 'landing-page.custom-pages.store',
                'edit' => 'landing-page.custom-pages.edit',
                'update' => 'landing-page.custom-pages.update',
                'destroy' => 'landing-page.custom-pages.destroy'
            ]);
        });

        // Impersonation routes
        Route::middleware('App\Http\Middleware\SuperAdminMiddleware')->group(function () {
            Route::get('impersonate/{userId}', [ImpersonateController::class, 'start'])->name('impersonate.start');
        });


        // Task Stage routes
        Route::middleware('permission:manage-task-stages')->group(function () {
            Route::get('task-stages', [TaskStageController::class, 'index'])->name('task-stages.index');
            Route::post('task-stages', [TaskStageController::class, 'store'])->middleware('permission:create-task-stages')->name('task-stages.store');
            Route::put('task-stages/{taskStage}', [TaskStageController::class, 'update'])->middleware('permission:edit-task-stages')->name('task-stages.update');
            Route::delete('task-stages/{taskStage}', [TaskStageController::class, 'destroy'])->middleware('permission:delete-task-stages')->name('task-stages.destroy');
            Route::put('task-stages/{taskStage}/toggle-status', [TaskStageController::class, 'toggleStatus'])->middleware('permission:edit-task-stages')->name('task-stages.toggle-status');
            Route::post('task-stages/update-order', [TaskStageController::class, 'updateOrder'])->middleware('permission:edit-task-stages')->name('task-stages.update-order');
        });

        // Project routes
        Route::middleware('permission:manage-projects')->group(function () {
            Route::get('projects', [ProjectController::class, 'index'])->name('projects.index');
            Route::get('projects/{project}', [ProjectController::class, 'show'])->name('projects.show');
            Route::get('projects/{project}/dashboard', [\App\Http\Controllers\ProjectDashboardController::class, 'show'])->name('projects.dashboard');
            Route::get('projects/{project}/export', [\App\Http\Controllers\ProjectDashboardController::class, 'export'])->name('projects.export');
            Route::post('projects', [ProjectController::class, 'store'])->middleware('permission:create-projects')->name('projects.store');
            Route::put('projects/{project}', [ProjectController::class, 'update'])->middleware('permission:edit-projects')->name('projects.update');
            Route::delete('projects/{project}', [ProjectController::class, 'destroy'])->middleware('permission:delete-projects')->name('projects.destroy');
            Route::put('projects/{project}/toggle-status', [ProjectController::class, 'toggleStatus'])->middleware('permission:edit-projects')->name('projects.toggle-status');

            // Project Milestones
            Route::post('projects/{project}/milestones', [ProjectMilestoneController::class, 'store'])->name('projects.milestones.store');
            Route::put('projects/{project}/milestones/{milestone}', [ProjectMilestoneController::class, 'update'])->name('projects.milestones.update');
            Route::delete('projects/{project}/milestones/{milestone}', [ProjectMilestoneController::class, 'destroy'])->name('projects.milestones.destroy');

            // Project Notes
            Route::post('projects/{project}/notes', [ProjectNoteController::class, 'store'])->name('projects.notes.store');
            Route::put('projects/{project}/notes/{note}', [ProjectNoteController::class, 'update'])->name('projects.notes.update');
            Route::delete('projects/{project}/notes/{note}', [ProjectNoteController::class, 'destroy'])->name('projects.notes.destroy');

            // Project Expenses
            Route::post('projects/{project}/expenses', [ProjectExpenseController::class, 'store'])->name('projects.expenses.store');
            Route::put('projects/{project}/expenses/{expense}', [ProjectExpenseController::class, 'update'])->name('projects.expenses.update');
            Route::delete('projects/{project}/expenses/{expense}', [ProjectExpenseController::class, 'destroy'])->name('projects.expenses.destroy');

            // Project Files
            Route::post('projects/{project}/files', [ProjectFileController::class, 'store'])->name('projects.files.store');
            Route::get('projects/{project}/files/{file}/download', [ProjectFileController::class, 'download'])->name('projects.files.download');
            Route::delete('projects/{project}/files/{file}', [ProjectFileController::class, 'destroy'])->name('projects.files.destroy');
        });

        // Task routes
        Route::middleware('permission:manage-tasks')->group(function () {
            Route::get('tasks', [TaskController::class, 'index'])->name('tasks.index');
            Route::get('tasks/{task}', [TaskController::class, 'show'])->name('tasks.show');
            Route::post('tasks', [TaskController::class, 'store'])->middleware('permission:create-tasks')->name('tasks.store');
            Route::put('tasks/{task}', [TaskController::class, 'update'])->middleware('permission:edit-tasks')->name('tasks.update');
            Route::delete('tasks/{task}', [TaskController::class, 'destroy'])->middleware('permission:delete-tasks')->name('tasks.destroy');

            // Task Checklists
            Route::post('task-checklists', [\App\Http\Controllers\TaskChecklistController::class, 'store'])->name('task-checklists.store');
            Route::put('task-checklists/{taskChecklist}', [\App\Http\Controllers\TaskChecklistController::class, 'update'])->name('task-checklists.update');
            Route::delete('task-checklists/{taskChecklist}', [\App\Http\Controllers\TaskChecklistController::class, 'destroy'])->name('task-checklists.destroy');

            // Task Files
            Route::post('task-files', [\App\Http\Controllers\TaskFileController::class, 'store'])->name('task-files.store');
            Route::get('task-files/{taskFile}/download', [\App\Http\Controllers\TaskFileController::class, 'download'])->name('task-files.download');
            Route::delete('task-files/{taskFile}', [\App\Http\Controllers\TaskFileController::class, 'destroy'])->name('task-files.destroy');
        });

        // Timesheet routes
        Route::middleware('permission:manage-timesheets')->group(function () {
            Route::get('timesheets', [\App\Http\Controllers\TimesheetController::class, 'index'])->name('timesheets.index');
            Route::post('timesheets', [\App\Http\Controllers\TimesheetController::class, 'store'])->middleware('permission:create-timesheets')->name('timesheets.store');
            Route::put('timesheets/{timesheet}', [\App\Http\Controllers\TimesheetController::class, 'update'])->middleware('permission:edit-timesheets')->name('timesheets.update');
            Route::delete('timesheets/{timesheet}', [\App\Http\Controllers\TimesheetController::class, 'destroy'])->middleware('permission:delete-timesheets')->name('timesheets.destroy');
            Route::get('api/timesheets/project-tasks/{project}', [\App\Http\Controllers\TimesheetController::class, 'getProjectTasks'])->name('api.timesheets.project-tasks');
            Route::get('api/tasks/project-milestones/{project}', [\App\Http\Controllers\TaskController::class, 'getProjectMilestones'])->name('api.tasks.project-milestones');
        });

        // Client routes
        Route::middleware('permission:manage-clients')->group(function () {
            Route::get('clients', [\App\Http\Controllers\ClientController::class, 'index'])->name('clients.index');
            Route::post('clients', [\App\Http\Controllers\ClientController::class, 'store'])->middleware('permission:create-clients')->name('clients.store');
            Route::put('clients/{client}', [\App\Http\Controllers\ClientController::class, 'update'])->middleware('permission:edit-clients')->name('clients.update');
            Route::delete('clients/{client}', [\App\Http\Controllers\ClientController::class, 'destroy'])->middleware('permission:delete-clients')->name('clients.destroy');
            Route::put('clients/{client}/toggle-status', [\App\Http\Controllers\ClientController::class, 'toggleStatus'])->middleware('permission:toggle-status-clients')->name('clients.toggle-status');
        });

        // Expense Category routes
        Route::middleware('permission:manage-expense-categories')->group(function () {
            Route::get('expense-categories', [\App\Http\Controllers\ExpenseCategoryController::class, 'index'])->name('expense-categories.index');
            Route::post('expense-categories', [\App\Http\Controllers\ExpenseCategoryController::class, 'store'])->middleware('permission:create-expense-categories')->name('expense-categories.store');
            Route::put('expense-categories/{expenseCategory}', [\App\Http\Controllers\ExpenseCategoryController::class, 'update'])->middleware('permission:edit-expense-categories')->name('expense-categories.update');
            Route::delete('expense-categories/{expenseCategory}', [\App\Http\Controllers\ExpenseCategoryController::class, 'destroy'])->middleware('permission:delete-expense-categories')->name('expense-categories.destroy');
            Route::put('expense-categories/{expenseCategory}/toggle-status', [\App\Http\Controllers\ExpenseCategoryController::class, 'toggleStatus'])->middleware('permission:toggle-status-expense-categories')->name('expense-categories.toggle-status');
        });

        // Expense routes
        Route::middleware('permission:manage-expenses')->group(function () {
            Route::get('expenses', [\App\Http\Controllers\ExpenseController::class, 'index'])->name('expenses.index');
            Route::post('expenses', [\App\Http\Controllers\ExpenseController::class, 'store'])->middleware('permission:create-expenses')->name('expenses.store');
            Route::put('expenses/{expense}', [\App\Http\Controllers\ExpenseController::class, 'update'])->middleware('permission:edit-expenses')->name('expenses.update');
            Route::delete('expenses/{expense}', [\App\Http\Controllers\ExpenseController::class, 'destroy'])->middleware('permission:delete-expenses')->name('expenses.destroy');
        });

        // Contract routes
        Route::middleware('permission:manage-contracts')->group(function () {
            Route::get('contracts', [\App\Http\Controllers\ContractController::class, 'index'])->name('contracts.index');
            Route::get('contracts/{contract}', [\App\Http\Controllers\ContractController::class, 'show'])->middleware('permission:view-contracts')->name('contracts.show');
            Route::get('contracts/{contract}/edit', [\App\Http\Controllers\ContractController::class, 'edit'])->middleware('permission:edit-contracts')->name('contracts.edit');
            Route::post('contracts', [\App\Http\Controllers\ContractController::class, 'store'])->middleware('permission:create-contracts')->name('contracts.store');
            Route::put('contracts/{contract}', [\App\Http\Controllers\ContractController::class, 'update'])->middleware('permission:edit-contracts')->name('contracts.update');
            Route::put('contracts/{contract}/send-contract', [\App\Http\Controllers\ContractController::class, 'sendContract'])->middleware('permission:edit-contracts')->name('contracts.send-contract');
            Route::delete('contracts/{contract}', [\App\Http\Controllers\ContractController::class, 'destroy'])->middleware('permission:delete-contracts')->name('contracts.destroy');
        });

        // Time Tracker routes
        Route::middleware('permission:manage-time-tracker')->group(function () {
            Route::get('time-tracker', [\App\Http\Controllers\TimeTrackerController::class, 'index'])->name('time-tracker.index');
            Route::get('api/time-tracker/active', [\App\Http\Controllers\TimeTrackerController::class, 'getActiveTracker'])->name('api.time-tracker.active');
            // Route::post('time-tracker/start', [\App\Http\Controllers\TimeTrackerController::class, 'start'])->name('time-tracker.start');
            Route::match(['POST', 'PATCH'], 'time-tracker/start', [\App\Http\Controllers\TimeTrackerController::class, 'start'])->name('time-tracker.start');
            Route::post('time-tracker/pause', [\App\Http\Controllers\TimeTrackerController::class, 'pause'])->name('time-tracker.pause');
            Route::post('time-tracker/resume', [\App\Http\Controllers\TimeTrackerController::class, 'resume'])->name('time-tracker.resume');
            Route::post('time-tracker/stop', [\App\Http\Controllers\TimeTrackerController::class, 'stop'])->name('time-tracker.stop');
        });

        // Invoice routes
        Route::middleware('permission:manage-invoices')->group(function () {
            Route::get('invoices', [\App\Http\Controllers\InvoiceController::class, 'index'])->name('invoices.index');
            Route::get('invoices/create', [\App\Http\Controllers\InvoiceController::class, 'create'])->middleware('permission:create-invoices')->name('invoices.create');
            Route::get('invoices/{invoice}', [\App\Http\Controllers\InvoiceController::class, 'show'])->middleware('permission:view-invoices')->name('invoices.show');
            Route::get('invoices/{invoice}/edit', [\App\Http\Controllers\InvoiceController::class, 'edit'])->middleware('permission:edit-invoices')->name('invoices.edit');
            Route::post('invoices', [\App\Http\Controllers\InvoiceController::class, 'store'])->middleware('permission:create-invoices')->name('invoices.store');
            Route::put('invoices/{invoice}', [\App\Http\Controllers\InvoiceController::class, 'update'])->middleware('permission:edit-invoices')->name('invoices.update');
            Route::put('invoices/{invoice}/send-reminder', [\App\Http\Controllers\InvoiceController::class, 'sendReminder'])->middleware('permission:edit-invoices')->name('invoices.send-reminder');
            Route::put('invoices/{invoice}/send-invoice', [\App\Http\Controllers\InvoiceController::class, 'sendInvoice'])->middleware('permission:edit-invoices')->name('invoices.send-invoice');
            Route::post('invoices/{invoice}/add-payment', [\App\Http\Controllers\InvoiceController::class, 'addPayment'])->middleware('permission:edit-invoices')->name('invoices.add-payment');
            Route::delete('invoice-payments/{payment}', [\App\Http\Controllers\InvoiceController::class, 'deletePayment'])->middleware('permission:edit-invoices')->name('invoice-payments.destroy');
            Route::delete('invoices/{invoice}', [\App\Http\Controllers\InvoiceController::class, 'destroy'])->middleware('permission:delete-invoices')->name('invoices.destroy');

            // Invoice Template Settings
            Route::get('settings/invoice-templates', [\App\Http\Controllers\InvoiceTemplateController::class, 'index'])->name('settings.invoice-templates');
            Route::post('settings/invoice-template', [\App\Http\Controllers\InvoiceTemplateController::class, 'update'])->name('settings.invoice-template');
            Route::get('invoice-template-preview/{template}', [\App\Http\Controllers\InvoiceTemplateController::class, 'preview'])->name('invoice-template.preview');


        });

        // Item routes
        Route::middleware('permission:manage-items')->group(function () {
            Route::get('items', [\App\Http\Controllers\ItemController::class, 'index'])->name('items.index');
            Route::post('items', [\App\Http\Controllers\ItemController::class, 'store'])->middleware('permission:create-items')->name('items.store');
            Route::put('items/{item}', [\App\Http\Controllers\ItemController::class, 'update'])->middleware('permission:edit-items')->name('items.update');
            Route::delete('items/{item}', [\App\Http\Controllers\ItemController::class, 'destroy'])->middleware('permission:delete-items')->name('items.destroy');
        });

        // Calendar routes
        Route::get('calendar', [\App\Http\Controllers\CalendarController::class, 'index'])->name('calendar.index');
        Route::get('calendar/google/connect', [\App\Http\Controllers\GoogleCalendarController::class, 'connect'])->name('calendar.google.connect');
        Route::get('calendar/google/callback', [\App\Http\Controllers\GoogleCalendarController::class, 'callback'])->name('calendar.google.callback');
        Route::post('calendar/google/disconnect', [\App\Http\Controllers\GoogleCalendarController::class, 'disconnect'])->name('calendar.google.disconnect');
        Route::post('calendar/sync', [\App\Http\Controllers\GoogleCalendarController::class, 'sync'])->name('calendar.sync');
        Route::get('api/calendar/google/events', [\App\Http\Controllers\GoogleCalendarController::class, 'getEvents'])->name('api.calendar.google.events');

        // Zoom Meeting routes
        Route::middleware('permission:manage-zoom-meetings')->group(function () {
            Route::get('zoom-meetings', [\App\Http\Controllers\ZoomMeetingController::class, 'index'])->name('zoom-meetings.index');
            Route::post('zoom-meetings', [\App\Http\Controllers\ZoomMeetingController::class, 'store'])->middleware('permission:create-zoom-meetings')->name('zoom-meetings.store');
            Route::get('zoom-meetings/{zoomMeeting}', [\App\Http\Controllers\ZoomMeetingController::class, 'show'])->middleware('permission:view-zoom-meetings')->name('zoom-meetings.show');
            Route::put('zoom-meetings/{zoomMeeting}', [\App\Http\Controllers\ZoomMeetingController::class, 'update'])->middleware('permission:edit-zoom-meetings')->name('zoom-meetings.update');
            Route::delete('zoom-meetings/{zoomMeeting}', [\App\Http\Controllers\ZoomMeetingController::class, 'destroy'])->middleware('permission:delete-zoom-meetings')->name('zoom-meetings.destroy');
            Route::post('zoom-meetings/{zoomMeeting}/join', [\App\Http\Controllers\ZoomMeetingController::class, 'join'])->name('zoom-meetings.join');
            Route::post('zoom-meetings/{zoomMeeting}/start', [\App\Http\Controllers\ZoomMeetingController::class, 'start'])->name('zoom-meetings.start');
            Route::get('api/zoom-meetings/calendar', [\App\Http\Controllers\ZoomMeetingController::class, 'calendar'])->name('api.zoom-meetings.calendar');
        });

    }); 
    // End plan.access middleware group
    Route::post('impersonate/leave', [ImpersonateController::class, 'leave'])->name('impersonate.leave');

});

require __DIR__ . '/settings.php';

// Payment settings routes
// Payment settings routes - accessible to company users
Route::middleware(['auth', 'verified', 'plan.access'])->group(function () {
    Route::post('settings/payment-settings', [\App\Http\Controllers\PaymentSettingsController::class, 'store'])->name('settings.payment-settings.store');
    Route::post('api/test-stripe-connection', [\App\Http\Controllers\PaymentSettingsController::class, 'testStripeConnection']);
});
require __DIR__ . '/auth.php';

// Test currency route
Route::get('/test-currency', function () {
    return response()->json([
        'superAdminCurrency' => getSuperAdminCurrency(),
        'authUserCurrency' => auth()->check() ? getAuthUserCurrency() : null,
        'formatCurrencyTest' => formatCurrency(100),
        'formatCurrencyWithSuperAdmin' => formatCurrency(100, true),
        'globalSettings' => [
            'superAdminCurrency' => getSuperAdminCurrency(),
            'authUserCurrency' => auth()->check() ? getAuthUserCurrency() : null,
        ]
    ]);
});

Route::match(['GET', 'POST'], 'payments/easebuzz/success', [EasebuzzPaymentController::class, 'success'])->name('easebuzz.success');
Route::post('payments/easebuzz/callback', [EasebuzzPaymentController::class, 'callback'])->name('easebuzz.callback');
// Public vCard routes removedme('easebuzz.success');
Route::post('payments/easebuzz/callback', [EasebuzzPaymentController::class, 'callback'])->name('easebuzz.callback');
// Public vCard routes removed
