<?php

declare(strict_types=1);

use App\Core\Router;
use App\Controllers\AuthController;
use App\Controllers\DashboardController;
use App\Controllers\ClientController;
use App\Controllers\ProductController;
use App\Controllers\VendorController;
use App\Controllers\ExpenseController;
use App\Controllers\QuotationController;
use App\Controllers\PublicQuotationController;
use App\Controllers\PublicInvoiceController;
use App\Controllers\PublicPortalController;
use App\Controllers\InvoiceController;
use App\Controllers\PaymentController;
use App\Controllers\MarketingController;
use App\Controllers\ReportController;
use App\Controllers\RecurringInvoiceController;
use App\Controllers\SocialAuthController;
use App\Controllers\SettingsController;
use App\Controllers\BillingController;
use App\Controllers\UsageController;
use App\Controllers\TeamController;
use App\Controllers\PublicPageController;
use App\Controllers\SalesController;
use App\Controllers\LeadCaptureController;
use App\Controllers\WorkflowController;
use App\Controllers\ClientPortalController;
use App\Controllers\ProposalController;
use App\Controllers\ProjectController;
use App\Controllers\PaymentSettingsController;
use App\Controllers\IntegrationController;
use App\Controllers\ApiController;
use App\Controllers\AccountingController;
use App\Controllers\CommerceController;
use App\Controllers\GuideController;
use App\Controllers\SupportController;

$router = new Router();

$router->get('/', [PublicPageController::class, 'home']);
$router->get('/index', [PublicPageController::class, 'home']);
$router->get('/pricing', [AuthController::class, 'pricing']);
$router->get('/blog', [PublicPageController::class, 'blog']);
$router->get('/blog/{slug}', [PublicPageController::class, 'blogPost']);
$router->get('/help', [PublicPageController::class, 'help']);
$router->get('/guide', [GuideController::class, 'show']);
$router->post('/guide', [GuideController::class, 'send']);
$router->get('/guide/thanks', [GuideController::class, 'thanks']);
$router->get('/guide/download/{token}', [GuideController::class, 'download']);
$router->get('/support', [SupportController::class, 'show']);
$router->post('/support', [SupportController::class, 'submit']);
$router->get('/support/thanks', [SupportController::class, 'thanks']);
$router->post('/support/thanks/close', [SupportController::class, 'close']);
$router->get('/support/tickets', [SupportController::class, 'tickets']);
$router->get('/support/tickets/{id}', [SupportController::class, 'ticket']);
$router->post('/support/tickets/{id}/status', [SupportController::class, 'ticketStatus']);
$router->post('/support/tickets/{id}/reply', [SupportController::class, 'ticketReply']);
$router->get('/register', [AuthController::class, 'registerForm']);
$router->post('/register', [AuthController::class, 'register']);
$router->get('/terms', [PublicPageController::class, 'terms']);
$router->get('/privacy', [PublicPageController::class, 'privacy']);
$router->get('/refunds', [PublicPageController::class, 'refunds']);
$router->get('/login', [AuthController::class, 'loginForm']);
$router->post('/login', [AuthController::class, 'login']);
$router->post('/logout', [AuthController::class, 'logout']);

$router->get('/l/{token}', [LeadCaptureController::class, 'show']);
$router->post('/l/{token}', [LeadCaptureController::class, 'submit']);
$router->get('/client/login', [ClientPortalController::class, 'login']);
$router->post('/client/access', [ClientPortalController::class, 'requestAccess']);
$router->get('/client/magic/{token}', [ClientPortalController::class, 'magic']);
$router->get('/client', [ClientPortalController::class, 'dashboard']);
$router->post('/client/requests', [ClientPortalController::class, 'storeRequest']);
$router->post('/client/documents', [ClientPortalController::class, 'upload']);
$router->get('/client/documents/{id}', [ClientPortalController::class, 'download']);
$router->post('/client/logout', [ClientPortalController::class, 'logout']);
$router->get('/api/v1/clients', [ApiController::class, 'clients']);
$router->post('/api/v1/clients', [ApiController::class, 'storeClient']);
$router->get('/api/v1/products', [ApiController::class, 'products']);
$router->get('/api/v1/invoices', [ApiController::class, 'invoices']);
$router->get('/signatures/{token}', [ProposalController::class, 'certificate']);

$router->get('/q/{token}', [PublicQuotationController::class, 'show']);
$router->post('/q/{token}/accept', [PublicQuotationController::class, 'accept']);
$router->post('/q/{token}/reject', [PublicQuotationController::class, 'reject']);
$router->post('/q/{token}/comment', [PublicQuotationController::class, 'comment']);
$router->get('/i/{token}', [PublicInvoiceController::class, 'show']);
$router->get('/i/{token}/pdf', [PublicInvoiceController::class, 'pdf']);
$router->post('/i/{token}/pay-online', [PublicInvoiceController::class, 'payOnline']);
$router->post('/i/{token}/proof', [PublicInvoiceController::class, 'submitProof']);
$router->get('/portal/q/{token}', [PublicPortalController::class, 'fromQuote']);
$router->get('/portal/i/{token}', [PublicPortalController::class, 'fromInvoice']);

$router->get('/dashboard', [DashboardController::class, 'index']);
$router->get('/accounting', [AccountingController::class, 'index']);
$router->post('/accounting/import', [AccountingController::class, 'import']);
$router->post('/accounting/transactions/{id}/match', [AccountingController::class, 'match']);
$router->get('/accounting/export/{type}', [AccountingController::class, 'export']);
$router->get('/commerce', [CommerceController::class, 'index']);
$router->post('/commerce/warehouses', [CommerceController::class, 'warehouse']);
$router->post('/commerce/movements', [CommerceController::class, 'movement']);
$router->post('/commerce/sales-orders', [CommerceController::class, 'salesOrder']);
$router->post('/commerce/purchase-orders', [CommerceController::class, 'purchaseOrder']);
$router->post('/commerce/vendor-bills', [CommerceController::class, 'vendorBill']);
$router->post('/commerce/branches', [CommerceController::class, 'branch']);
$router->get('/projects', [ProjectController::class, 'index']);
$router->post('/projects', [ProjectController::class, 'store']);
$router->get('/projects/{id}', [ProjectController::class, 'show']);
$router->post('/projects/from-quotation/{id}', [ProjectController::class, 'fromQuotation']);
$router->post('/projects/{id}/status', [ProjectController::class, 'status']);
$router->post('/projects/{id}/tasks', [ProjectController::class, 'task']);
$router->post('/projects/{projectId}/tasks/{taskId}', [ProjectController::class, 'taskStatus']);
$router->post('/projects/{id}/time', [ProjectController::class, 'time']);
$router->post('/projects/{id}/costs', [ProjectController::class, 'cost']);
$router->post('/projects/{id}/appointments', [ProjectController::class, 'appointment']);
$router->get('/sales', [SalesController::class, 'index']);
$router->post('/sales/leads', [SalesController::class, 'storeLead']);
$router->post('/sales/leads/{id}/status', [SalesController::class, 'leadStatus']);
$router->post('/sales/leads/{id}/qualify', [SalesController::class, 'qualifyLead']);
$router->post('/sales/leads/{id}/owner', [SalesController::class, 'leadOwner']);
$router->post('/sales/deals', [SalesController::class, 'storeDeal']);
$router->post('/sales/deals/{id}/stage', [SalesController::class, 'moveDeal']);
$router->post('/sales/deals/{id}/owner', [SalesController::class, 'dealOwner']);
$router->post('/sales/tasks', [SalesController::class, 'storeTask']);
$router->post('/sales/tasks/bulk-reassign', [SalesController::class, 'bulkReassignTasks']);
$router->post('/sales/tasks/{id}/claim', [SalesController::class, 'claimTask']);
$router->post('/sales/tasks/{id}/start', [SalesController::class, 'startTask']);
$router->post('/sales/tasks/{id}/complete', [SalesController::class, 'completeTask']);
$router->post('/sales/tasks/{id}/reassign', [SalesController::class, 'reassignTask']);
$router->post('/sales/tasks/{id}/snooze', [SalesController::class, 'snoozeTask']);
$router->post('/sales/tasks/{id}/cancel', [SalesController::class, 'cancelTask']);
$router->post('/sales/tasks/{id}/reopen', [SalesController::class, 'reopenTask']);
$router->post('/sales/activities', [SalesController::class, 'storeActivity']);
$router->post('/sales/tracking-links', [SalesController::class, 'storeLink']);
$router->get('/settings/workflows', [WorkflowController::class, 'index']);
$router->post('/settings/workflows', [WorkflowController::class, 'store']);
$router->post('/settings/workflows/samples', [WorkflowController::class, 'installSamples']);
$router->post('/settings/workflows/{id}/test', [WorkflowController::class, 'testSample']);
$router->post('/settings/workflows/{id}/status', [WorkflowController::class, 'status']);
$router->get('/settings/proposals', [ProposalController::class, 'templates']);
$router->post('/settings/proposals', [ProposalController::class, 'store']);
$router->post('/settings/proposals/library', [ProposalController::class, 'installLibrary']);
$router->post('/settings/proposals/{id}', [ProposalController::class, 'update']);
$router->post('/settings/proposals/{id}/duplicate', [ProposalController::class, 'duplicate']);
$router->post('/settings/proposals/{id}/status', [ProposalController::class, 'status']);
$router->get('/settings/payments', [PaymentSettingsController::class, 'index']);
$router->post('/settings/payments', [PaymentSettingsController::class, 'store']);
$router->post('/settings/payments/{id}/status', [PaymentSettingsController::class, 'status']);
$router->get('/settings/integrations', [IntegrationController::class, 'index']);
$router->post('/settings/integrations/api-keys', [IntegrationController::class, 'issueKey']);
$router->post('/settings/integrations/api-keys/sample', [IntegrationController::class, 'issueSampleKey']);
$router->post('/settings/integrations/webhooks/sample', [IntegrationController::class, 'installSampleWebhook']);
$router->post('/settings/integrations/api-keys/{id}/revoke', [IntegrationController::class, 'revokeKey']);
$router->post('/settings/integrations/webhooks', [IntegrationController::class, 'storeWebhook']);
$router->post('/settings/integrations/webhooks/{id}', [IntegrationController::class, 'updateWebhook']);
$router->post('/settings/integrations/webhooks/{id}/test', [IntegrationController::class, 'testWebhook']);
$router->post('/settings/integrations/webhooks/{id}/rotate-secret', [IntegrationController::class, 'rotateWebhookSecret']);
$router->post('/settings/integrations/webhooks/{id}/status', [IntegrationController::class, 'webhookStatus']);
$router->get('/billing', [BillingController::class, 'index']);
$router->get('/billing/plans', [BillingController::class, 'plans']);
$router->get('/usage/ai', [UsageController::class, 'ai']);
$router->post('/billing/change-plan', [BillingController::class, 'changePlan']);
$router->post('/billing/pay', [BillingController::class, 'pay']);
$router->get('/billing/dpo-return', [BillingController::class, 'dpoReturn']);

$router->get('/clients', [ClientController::class, 'index']);
$router->post('/clients', [ClientController::class, 'store']);
$router->post('/clients/{id}/update', [ClientController::class, 'update']);
$router->post('/clients/{id}/delete', [ClientController::class, 'delete']);

$router->get('/products', [ProductController::class, 'index']);
$router->post('/products', [ProductController::class, 'store']);
$router->post('/products/{id}/update', [ProductController::class, 'update']);
$router->post('/products/{id}/delete', [ProductController::class, 'delete']);

$router->get('/vendors', [VendorController::class, 'index']);
$router->post('/vendors', [VendorController::class, 'store']);
$router->post('/vendors/{id}/update', [VendorController::class, 'update']);
$router->post('/vendors/{id}/delete', [VendorController::class, 'delete']);

$router->get('/expenses', [ExpenseController::class, 'index']);
$router->post('/expenses', [ExpenseController::class, 'store']);
$router->post('/expenses/{id}/delete', [ExpenseController::class, 'delete']);

$router->get('/quotations', [QuotationController::class, 'index']);
$router->get('/quotations/create', [QuotationController::class, 'create']);
$router->post('/quotations', [QuotationController::class, 'store']);
$router->get('/quotations/{id}', [QuotationController::class, 'show']);
$router->get('/quotations/{id}/pdf', [QuotationController::class, 'pdf']);
$router->get('/quotations/{id}/whatsapp', [QuotationController::class, 'whatsapp']);
$router->post('/quotations/{id}/send', [QuotationController::class, 'send']);
$router->post('/quotations/{id}/mark-sent', [QuotationController::class, 'markSent']);
$router->post('/quotations/{id}/convert', [QuotationController::class, 'convert']);
$router->post('/quotations/{id}/comment', [QuotationController::class, 'comment']);
$router->post('/quotations/{id}/approve', [QuotationController::class, 'approve']);
$router->post('/quotations/{id}/reject-approval', [QuotationController::class, 'rejectApproval']);

$router->get('/invoices', [InvoiceController::class, 'index']);
$router->get('/invoices/{id}', [InvoiceController::class, 'show']);
$router->get('/invoices/{id}/pdf', [InvoiceController::class, 'pdf']);
$router->get('/invoices/{id}/whatsapp', [InvoiceController::class, 'whatsapp']);
$router->post('/invoices/{id}/send', [InvoiceController::class, 'send']);
$router->post('/invoices/{id}/remind', [InvoiceController::class, 'remind']);
$router->post('/invoices/{id}/pay-online', [InvoiceController::class, 'payOnline']);
$router->post('/invoices/{id}/milestones', [InvoiceController::class, 'addMilestone']);
$router->post('/invoices/{invoiceId}/milestones/{milestoneId}', [InvoiceController::class, 'updateMilestone']);
$router->post('/invoices/{invoiceId}/proofs/{proofId}', [InvoiceController::class, 'reconcileProof']);

$router->get('/recurring-invoices', [RecurringInvoiceController::class, 'index']);
$router->post('/invoices/{id}/recurring', [RecurringInvoiceController::class, 'storeFromInvoice']);
$router->post('/recurring-invoices/{id}/pause', [RecurringInvoiceController::class, 'pause']);
$router->post('/recurring-invoices/{id}/resume', [RecurringInvoiceController::class, 'resume']);
$router->post('/recurring-invoices/{id}/cancel', [RecurringInvoiceController::class, 'cancel']);

$router->post('/payments', [PaymentController::class, 'store']);
$router->get('/payments/dpo/return', [PaymentController::class, 'dpoReturn']);

$router->get('/marketing', [MarketingController::class, 'index']);
$router->get('/marketing/activity', [MarketingController::class, 'activity']);
$router->post('/marketing/generate', [MarketingController::class, 'generate']);
$router->post('/marketing/ai-generator', [MarketingController::class, 'generateAiTool']);
$router->post('/marketing/drafts', [MarketingController::class, 'storeDraft']);
$router->post('/marketing/drafts/{id}/update', [MarketingController::class, 'updateDraft']);
$router->post('/marketing/drafts/{id}/delete', [MarketingController::class, 'deleteDraft']);
$router->post('/marketing/drafts/{id}/approval', [MarketingController::class, 'approval']);
$router->post('/marketing/drafts/{id}/recycle', [MarketingController::class, 'recycle']);
$router->post('/marketing/drafts/{id}/metrics', [MarketingController::class, 'metrics']);
$router->post('/marketing/media', [MarketingController::class, 'saveMedia']);
$router->get('/marketing/media/progress', [MarketingController::class, 'mediaProgress']);
$router->post('/marketing/media/worker', [MarketingController::class, 'startMediaWorker']);
$router->post('/marketing/media/bulk', [MarketingController::class, 'bulkMedia']);
$router->post('/marketing/media/delete', [MarketingController::class, 'deleteMedia']);
$router->post('/marketing/product-poster', [MarketingController::class, 'generateProductPoster']);
$router->post('/marketing/product-social-posts', [MarketingController::class, 'createProductSocialPosts']);

$router->get('/social/{provider}/connect', [SocialAuthController::class, 'redirect']);
$router->get('/social/{provider}/callback', [SocialAuthController::class, 'callback']);
$router->post('/social/accounts/{id}/disconnect', [SocialAuthController::class, 'disconnect']);

$router->get('/reports', [ReportController::class, 'index']);
$router->get('/reports/unit-economics', [ReportController::class, 'unitEconomics']);
$router->get('/reports/unit-economics.csv', [ReportController::class, 'unitEconomicsCsv']);

$router->get('/team', [TeamController::class, 'index']);
$router->post('/team', [TeamController::class, 'store']);
$router->post('/team/{id}/update', [TeamController::class, 'update']);
$router->post('/team/{id}/status', [TeamController::class, 'status']);

$router->get('/settings/company', [SettingsController::class, 'company']);
$router->post('/settings/company', [SettingsController::class, 'updateCompany']);
$router->get('/settings/subscription-plans', [SettingsController::class, 'subscriptionPlans']);
$router->post('/settings/subscription-plans', [SettingsController::class, 'storeSubscriptionPlan']);
$router->post('/settings/subscription-plans/{id}', [SettingsController::class, 'updateSubscriptionPlan']);
$router->get('/settings/letterhead', [SettingsController::class, 'letterhead']);
$router->get('/settings/production', [SettingsController::class, 'production']);
$router->post('/settings/production/backup', [SettingsController::class, 'createBackup']);
$router->post('/settings/production/test-email', [SettingsController::class, 'sendTestEmail']);
$router->get('/settings/tutorial-video', [SettingsController::class, 'tutorialVideo']);
$router->get('/settings/tutorials/{file}', [SettingsController::class, 'tutorialVideo']);
$router->post('/settings/letterhead', [SettingsController::class, 'uploadLetterhead']);
$router->post('/settings/stamp', [SettingsController::class, 'uploadStamp']);

return $router;
