<?php

use App\Http\Controllers\Admin\AiSupportController;
use App\Http\Controllers\Admin\CompanyController;
use App\Http\Controllers\Admin\DashboardController;
use App\Http\Controllers\Admin\ForumCategoryController;
use App\Http\Controllers\Admin\ForumTagController;
use App\Http\Controllers\Admin\ForumTopicController;
use App\Http\Controllers\Admin\MattockArticleController;
use App\Http\Controllers\Admin\MattockCategoryController;
use App\Http\Controllers\Admin\PipopaArticleController;
use App\Http\Controllers\Admin\PipopaCategoryController;
use App\Http\Controllers\Admin\RoleController;
use App\Http\Controllers\Admin\UserController;
use App\Http\Controllers\MediaController;
use App\Http\Controllers\Settings\PasswordController;
use App\Http\Controllers\Settings\ProfileController;
use App\Http\Controllers\Settings\SettingController;
use App\Http\Controllers\ClaudeAiController;
use App\Http\Controllers\ImageBatchController;
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;

Route::middleware(['auth', 'verified'])->group(function () {
    /*Route::get('/forum/create/', function () {
        return Inertia::render('mattock/ForumCreate');
    })->name('forum.create');

    Route::get('/forum/new/', function () {
        return Inertia::render('mattock/ForumNew');
    })->name('forum.new');*/

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

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

    Route::middleware(['role:administrator|manager|editor|contributor|author|subscriber|tester|forum_tester'])->group(function () {
        Route::group(['prefix' => 'admin'], function () {
            // Dashboard
            Route::get('/dashboard', [DashboardController::class, 'index'])->name('admin.dashboard');

            // AI Support Management
            Route::group(['prefix' => 'ai-support'], function () {
                Route::get('/keywords', [AiSupportController::class, 'keywords'])->name('admin.ai-support.keywords');
                Route::get('/keywords/create', [AiSupportController::class, 'createKeyword'])->name('admin.ai-support.keywords.create');
                Route::post('/keywords', [AiSupportController::class, 'storeKeyword'])->name('admin.ai-support.keywords.store');
                Route::get('/keywords/{keyword}/edit', [AiSupportController::class, 'editKeyword'])->name('admin.ai-support.keywords.edit');
                Route::put('/keywords/{keyword}', [AiSupportController::class, 'updateKeyword'])->name('admin.ai-support.keywords.update');
                Route::delete('/keywords/{keyword}', [AiSupportController::class, 'destroyKeyword'])->name('admin.ai-support.keywords.destroy');
                Route::post('/keywords/{id}/reanalyze', [AiSupportController::class, 'reanalyzeKeyword'])->name('admin.ai-support.keywords.reanalyze');
                Route::get('/keywords/{id}/status', [AiSupportController::class, 'getKeywordStatus'])->name('admin.ai-support.keywords.status');
                Route::post('/keywords/bulk-action', [AiSupportController::class, 'bulkAction'])->name('admin.ai-support.keywords.bulk');
                Route::get('/csv-upload', [AiSupportController::class, 'csvUpload'])->name('admin.ai-support.csv-upload');
                Route::get('/ai-writer', [AiSupportController::class, 'aiWriter'])->name('admin.ai-support.ai-writer');
                Route::get('/ai-articles', [AiSupportController::class, 'aiArticles'])->name('admin.ai-support.ai-articles');
                Route::get('/fetch-categories', [AiSupportController::class, 'fetchCategories'])->name('admin.ai-support.fetch-categories');
                Route::post('/generate-completion', [AiSupportController::class, 'generateCompletion'])->name('admin.ai-support.generate-completion');
            });

            // Mattock Blog Management
            Route::group(['prefix' => 'mattock'], function () {
                Route::get('categories', [MattockCategoryController::class, 'index'])->name('admin.mattock.categories.index')->middleware('permission:categories.mattock.manager|categories.mattock.dashboard|categories.mattock.view');
                Route::get('categories/create', [MattockCategoryController::class, 'create'])->name('admin.mattock.categories.create')->middleware('permission:categories.mattock.manager|categories.mattock.create');
                Route::post('categories', [MattockCategoryController::class, 'store'])->name('admin.mattock.categories.store')->middleware('permission:categories.mattock.manager|categories.mattock.create');
                Route::get('categories/{category}', [MattockCategoryController::class, 'show'])->name('admin.mattock.categories.show')->middleware('permission:categories.mattock.manager|categories.mattock.view');
                Route::get('categories/{category}/edit', [MattockCategoryController::class, 'edit'])->name('admin.mattock.categories.edit')->middleware('permission:categories.mattock.manager|categories.mattock.edit');
                Route::put('categories/{category}', [MattockCategoryController::class, 'update'])->name('admin.mattock.categories.update')->middleware('permission:categories.mattock.manager|categories.mattock.edit');
                Route::delete('categories/{category}', [MattockCategoryController::class, 'destroy'])->name('admin.mattock.categories.destroy')->middleware('permission:categories.mattock.manager|categories.mattock.delete');
                Route::post('categories/{id}/restore', [MattockCategoryController::class, 'restore'])->name('admin.mattock.categories.restore')->middleware('permission:categories.mattock.manager');
                Route::delete('categories/{id}/force-delete', [MattockCategoryController::class, 'forceDelete'])->name('admin.mattock.categories.force-delete')->middleware('permission:categories.mattock.manager');

                Route::get('articles', [MattockArticleController::class, 'index'])->name('admin.mattock.articles.index')->middleware('permission:articles.mattock.manager|articles.mattock.dashboard|articles.mattock.view|articles.mattock.owner.view');
                Route::get('articles/create', [MattockArticleController::class, 'create'])->name('admin.mattock.articles.create')->middleware('permission:articles.mattock.manager|articles.mattock.create');
                Route::post('articles', [MattockArticleController::class, 'store'])->name('admin.mattock.articles.store')->middleware('permission:articles.mattock.manager|articles.mattock.create');
                Route::get('articles/{article}', [MattockArticleController::class, 'show'])->name('admin.mattock.articles.show')->middleware('permission:articles.mattock.manager|articles.mattock.view|articles.mattock.owner.view');
                Route::get('articles/{article}/edit', [MattockArticleController::class, 'edit'])->name('admin.mattock.articles.edit')->middleware('permission:articles.mattock.manager|articles.mattock.edit|articles.mattock.owner.edit');
                Route::put('articles/{article}', [MattockArticleController::class, 'update'])->name('admin.mattock.articles.update')->middleware('permission:articles.mattock.manager|articles.mattock.edit|articles.mattock.owner.edit');
                Route::delete('articles/{article}', [MattockArticleController::class, 'destroy'])->name('admin.mattock.articles.destroy')->middleware('permission:articles.mattock.manager|articles.mattock.delete|articles.mattock.owner.delete');
                Route::post('articles/{id}/restore', [MattockArticleController::class, 'restore'])->name('admin.mattock.articles.restore')->middleware('permission:articles.mattock.manager');
                Route::delete('articles/{id}/force-delete', [MattockArticleController::class, 'forceDelete'])->name('admin.mattock.articles.force-delete')->middleware('permission:articles.mattock.manager');
                Route::post('articles/{article}/duplicate', [MattockArticleController::class, 'duplicate'])->name('admin.mattock.articles.duplicate')->middleware('permission:articles.mattock.manager|articles.mattock.create');
                Route::post('articles/bulk-action', [MattockArticleController::class, 'bulkAction'])->name('admin.mattock.articles.bulk-action')->middleware('permission:articles.mattock.manager');
            });

            // Pipopa Blog Management
            Route::group(['prefix' => 'pipopa'], function () {
                Route::get('categories', [PipopaCategoryController::class, 'index'])->name('admin.pipopa.categories.index')->middleware('permission:categories.pipopa.manager|categories.pipopa.dashboard|categories.pipopa.view');
                Route::get('categories/create', [PipopaCategoryController::class, 'create'])->name('admin.pipopa.categories.create')->middleware('permission:categories.pipopa.manager|categories.pipopa.create');
                Route::post('categories', [PipopaCategoryController::class, 'store'])->name('admin.pipopa.categories.store')->middleware('permission:categories.pipopa.manager|categories.pipopa.create');
                Route::get('categories/{category}', [PipopaCategoryController::class, 'show'])->name('admin.pipopa.categories.show')->middleware('permission:categories.pipopa.manager|categories.pipopa.view');
                Route::get('categories/{category}/edit', [PipopaCategoryController::class, 'edit'])->name('admin.pipopa.categories.edit')->middleware('permission:categories.pipopa.manager|categories.pipopa.edit');
                Route::put('categories/{category}', [PipopaCategoryController::class, 'update'])->name('admin.pipopa.categories.update')->middleware('permission:categories.pipopa.manager|categories.pipopa.edit');
                Route::delete('categories/{category}', [PipopaCategoryController::class, 'destroy'])->name('admin.pipopa.categories.destroy')->middleware('permission:categories.pipopa.manager|categories.pipopa.delete');
                Route::post('categories/{id}/restore', [PipopaCategoryController::class, 'restore'])->name('admin.pipopa.categories.restore')->middleware('permission:categories.pipopa.manager');
                Route::delete('categories/{id}/force-delete', [PipopaCategoryController::class, 'forceDelete'])->name('admin.pipopa.categories.force-delete')->middleware('permission:categories.pipopa.manager');

                Route::get('articles', [PipopaArticleController::class, 'index'])->name('admin.pipopa.articles.index')->middleware('permission:articles.pipopa.manager|articles.pipopa.dashboard|articles.pipopa.view|articles.pipopa.owner.view');
                Route::get('articles/create', [PipopaArticleController::class, 'create'])->name('admin.pipopa.articles.create')->middleware('permission:articles.pipopa.manager|articles.pipopa.create');
                Route::post('articles', [PipopaArticleController::class, 'store'])->name('admin.pipopa.articles.store')->middleware('permission:articles.pipopa.manager|articles.pipopa.create');
                Route::get('articles/{article}', [PipopaArticleController::class, 'show'])->name('admin.pipopa.articles.show')->middleware('permission:articles.pipopa.manager|articles.pipopa.view|articles.pipopa.owner.view');
                Route::get('articles/{article}/edit', [PipopaArticleController::class, 'edit'])->name('admin.pipopa.articles.edit')->middleware('permission:articles.pipopa.manager|articles.pipopa.edit|articles.pipopa.owner.edit');
                Route::put('articles/{article}', [PipopaArticleController::class, 'update'])->name('admin.pipopa.articles.update')->middleware('permission:articles.pipopa.manager|articles.pipopa.edit|articles.pipopa.owner.edit');
                Route::delete('articles/{article}', [PipopaArticleController::class, 'destroy'])->name('admin.pipopa.articles.destroy')->middleware('permission:articles.pipopa.manager|articles.pipopa.delete|articles.pipopa.owner.delete');
                Route::post('articles/{id}/restore', [PipopaArticleController::class, 'restore'])->name('admin.pipopa.articles.restore')->middleware('permission:articles.pipopa.manager');
                Route::delete('articles/{id}/force-delete', [PipopaArticleController::class, 'forceDelete'])->name('admin.pipopa.articles.force-delete')->middleware('permission:articles.pipopa.manager');
                Route::post('articles/{article}/duplicate', [PipopaArticleController::class, 'duplicate'])->name('admin.pipopa.articles.duplicate')->middleware('permission:articles.pipopa.manager|articles.pipopa.create');
                Route::post('articles/bulk-action', [PipopaArticleController::class, 'bulkAction'])->name('admin.pipopa.articles.bulk-action')->middleware('permission:articles.pipopa.manager');
            });

            // Forum Management
            Route::group(['prefix' => 'forum'], function () {
                // Topics
                Route::get('topics', [ForumTopicController::class, 'index'])->name('admin.forum.topics.index')->middleware('permission:topics.manager|topics.dashboard|topics.view');
                Route::get('topics/create', [ForumTopicController::class, 'create'])->name('admin.forum.topics.create')->middleware('permission:topics.manager|topics.create');
                Route::post('topics', [ForumTopicController::class, 'store'])->name('admin.forum.topics.store')->middleware('permission:topics.manager|topics.create');
                Route::get('topics/{topic}', [ForumTopicController::class, 'show'])->name('admin.forum.topics.show')->middleware('permission:topics.manager|topics.view');
                Route::get('topics/{topic}/edit', [ForumTopicController::class, 'edit'])->name('admin.forum.topics.edit')->middleware('permission:topics.manager|topics.edit|topics.owner.edit');
                Route::put('topics/{topic}', [ForumTopicController::class, 'update'])->name('admin.forum.topics.update')->middleware('permission:topics.manager|topics.edit|topics.owner.edit');
                Route::delete('topics/{topic}', [ForumTopicController::class, 'destroy'])->name('admin.forum.topics.destroy')->middleware('permission:topics.manager|topics.delete|topics.owner.delete');
                Route::post('topics/{id}/restore', [ForumTopicController::class, 'restore'])->name('admin.forum.topics.restore')->middleware('permission:topics.manager');
                Route::delete('topics/{id}/force-delete', [ForumTopicController::class, 'forceDelete'])->name('admin.forum.topics.force-delete')->middleware('permission:topics.manager');
                
                // Categories
                Route::get('categories', [ForumCategoryController::class, 'index'])->name('admin.forum.categories.index')->middleware('permission:topics.category.manager|topics.category.dashboard|topics.category.view');
                Route::get('categories/create', [ForumCategoryController::class, 'create'])->name('admin.forum.categories.create')->middleware('permission:topics.category.manager|topics.category.create');
                Route::post('categories', [ForumCategoryController::class, 'store'])->name('admin.forum.categories.store')->middleware('permission:topics.category.manager|topics.category.create');
                Route::get('categories/{category}', [ForumCategoryController::class, 'show'])->name('admin.forum.categories.show')->middleware('permission:topics.category.manager|topics.category.view');
                Route::get('categories/{category}/edit', [ForumCategoryController::class, 'edit'])->name('admin.forum.categories.edit')->middleware('permission:topics.category.manager|topics.category.edit');
                Route::put('categories/{category}', [ForumCategoryController::class, 'update'])->name('admin.forum.categories.update')->middleware('permission:topics.category.manager|topics.category.edit');
                Route::delete('categories/{category}', [ForumCategoryController::class, 'destroy'])->name('admin.forum.categories.destroy')->middleware('permission:topics.category.manager|topics.category.delete');
                Route::post('categories/{id}/restore', [ForumCategoryController::class, 'restore'])->name('admin.forum.categories.restore')->middleware('permission:topics.category.manager');
                Route::delete('categories/{id}/force-delete', [ForumCategoryController::class, 'forceDelete'])->name('admin.forum.categories.force-delete')->middleware('permission:topics.category.manager');
                
                // Tags
                Route::get('tags', [ForumTagController::class, 'index'])->name('admin.forum.tags.index')->middleware('permission:topics.tag.manager|topics.tag.dashboard|topics.tag.view');
                Route::get('tags/create', [ForumTagController::class, 'create'])->name('admin.forum.tags.create')->middleware('permission:topics.tag.manager|topics.tag.create');
                Route::post('tags', [ForumTagController::class, 'store'])->name('admin.forum.tags.store')->middleware('permission:topics.tag.manager|topics.tag.create');
                Route::get('tags/{tag}', [ForumTagController::class, 'show'])->name('admin.forum.tags.show')->middleware('permission:topics.tag.manager|topics.tag.view');
                Route::get('tags/{tag}/edit', [ForumTagController::class, 'edit'])->name('admin.forum.tags.edit')->middleware('permission:topics.tag.manager|topics.tag.edit');
                Route::put('tags/{tag}', [ForumTagController::class, 'update'])->name('admin.forum.tags.update')->middleware('permission:topics.tag.manager|topics.tag.edit');
                Route::delete('tags/{tag}', [ForumTagController::class, 'destroy'])->name('admin.forum.tags.destroy')->middleware('permission:topics.tag.manager|topics.tag.delete');
                Route::post('tags/{id}/restore', [ForumTagController::class, 'restore'])->name('admin.forum.tags.restore')->middleware('permission:topics.tag.manager');
                Route::delete('tags/{id}/force-delete', [ForumTagController::class, 'forceDelete'])->name('admin.forum.tags.force-delete')->middleware('permission:topics.tag.manager');
                Route::post('tags/{tag}/merge', [ForumTagController::class, 'merge'])->name('admin.forum.tags.merge')->middleware('permission:topics.tag.manager');
            });

            // User Management
            Route::get('users', [UserController::class, 'index'])->name('admin.users.index')->middleware('permission:users.manager|users.dashboard|users.view');
            Route::get('users/create', [UserController::class, 'create'])->name('admin.users.create')->middleware('permission:users.manager|users.create');
            Route::post('users', [UserController::class, 'store'])->name('admin.users.store')->middleware('permission:users.manager|users.create');
            Route::get('users/{user}', [UserController::class, 'show'])->name('admin.users.show')->middleware('permission:users.manager|users.view');
            Route::get('users/{user}/edit', [UserController::class, 'edit'])->name('admin.users.edit')->middleware('permission:users.manager|users.edit');
            Route::put('users/{user}', [UserController::class, 'update'])->name('admin.users.update')->middleware('permission:users.manager|users.edit');
            Route::delete('users/{user}', [UserController::class, 'destroy'])->name('admin.users.destroy')->middleware('permission:users.manager|users.delete');

            // Role Management
            Route::get('roles', [RoleController::class, 'index'])->name('admin.roles.index')->middleware('permission:roles.manager|roles.dashboard|roles.view');
            Route::get('roles/create', [RoleController::class, 'create'])->name('admin.roles.create')->middleware('permission:roles.manager|roles.create');
            Route::post('roles', [RoleController::class, 'store'])->name('admin.roles.store')->middleware('permission:roles.manager|roles.create');
            Route::get('roles/{role}', [RoleController::class, 'show'])->name('admin.roles.show')->middleware('permission:roles.manager|roles.view');
            Route::get('roles/{role}/edit', [RoleController::class, 'edit'])->name('admin.roles.edit')->middleware('permission:roles.manager|roles.edit');
            Route::put('roles/{role}', [RoleController::class, 'update'])->name('admin.roles.update')->middleware('permission:roles.manager|roles.edit');
            Route::delete('roles/{role}', [RoleController::class, 'destroy'])->name('admin.roles.destroy')->middleware('permission:roles.manager|roles.delete');

            // Company Management
            Route::get('company', [CompanyController::class, 'index'])->name('admin.company.index')->middleware('permission:company.manager|company.dashboard|company.view');
            Route::get('company/create', [CompanyController::class, 'create'])->name('admin.company.create')->middleware('permission:company.manager|company.create');
            Route::post('company', [CompanyController::class, 'store'])->name('admin.company.store')->middleware('permission:company.manager|company.create');
            Route::get('company/{userDetail}', [CompanyController::class, 'show'])->name('admin.company.show')->middleware('permission:company.manager|company.view');
            Route::get('company/{userDetail}/edit', [CompanyController::class, 'edit'])->name('admin.company.edit')->middleware('permission:company.manager|company.edit');
            Route::put('company/{userDetail}', [CompanyController::class, 'update'])->name('admin.company.update')->middleware('permission:company.manager|company.edit');
            Route::put('company/{userDetail}/status', [CompanyController::class, 'updateStatus'])->name('admin.company.status')->middleware('permission:company.manager|company.approve');
            Route::delete('company/{userDetail}', [CompanyController::class, 'destroy'])->name('admin.company.destroy')->middleware('permission:company.manager|company.delete');

            // Settings
            Route::get('settings/general', [SettingController::class, 'edit'])->name('admin.general.edit')->middleware('permission:roles.manager');
            Route::put('settings/general', [SettingController::class, 'update'])->name('admin.general.update')->middleware('permission:roles.manager');

            Route::get('settings/profile', [ProfileController::class, 'edit'])->name('admin.profile.edit');
            Route::patch('settings/profile', [ProfileController::class, 'update'])->name('admin.profile.update');
            Route::delete('settings/profile', [ProfileController::class, 'destroy'])->name('admin.profile.destroy');

            Route::get('settings/password', [PasswordController::class, 'edit'])->name('admin.password.edit');
            Route::put('settings/password', [PasswordController::class, 'update'])->name('admin.password.update');

            // Image upload for editor
            Route::post('/upload-image', [MediaController::class, 'uploadImage'])->name('admin.upload-image');
            
            // File upload for AI Support
            Route::post('/upload-file', [AiSupportController::class, 'uploadFile'])->name('admin.upload-file');
            Route::post('/process-csv', [AiSupportController::class, 'processCSV'])->name('admin.process-csv');
            Route::post('/check-batch-progress', [AiSupportController::class, 'checkBatchProgress'])->name('admin.check-batch-progress');

            // Get fresh CSRF token
            Route::get('/csrf-token', function () {
                return response()->json(['token' => csrf_token()]);
            })->name('admin.csrf-token');

            // Pages
            Route::prefix('pages')->group(function () {
                Route::get('/blank', function () {
                    return Inertia::render('admin/pages/BlankPage');
                })->name('admin.pages.blank');

                Route::get('/404', function () {
                    return Inertia::render('admin/pages/Error404');
                })->name('admin.pages.404');
            });
        });
    });
});

Route::middleware(['auth', 'force.json'])->prefix('api')->group(function () {
	// Claude AI API routes
	Route::group(['prefix' => 'claude'], function () {
		Route::post('/generate-structure', [ClaudeAiController::class, 'generateStructure'])->name('claude.api.generate.structure');
		Route::post('/modify-structure', [ClaudeAiController::class, 'modifyStructure'])->name('claude.api.modify.structure');
		Route::post('/write-article', [ClaudeAiController::class, 'writeArticle'])->name('claude.api.write.article');
		Route::post('/modify-article', [ClaudeAiController::class, 'modifyArticle'])->name('claude.api.modify.article');
	});
	
	// AI Writer API routes
	Route::group(['prefix' => 'ai-writer'], function () {
		Route::get('/keywords', [AiSupportController::class, 'getKeywordsForWriter'])->name('api.ai-writer.keywords');
		Route::post('/generate-brief', [AiSupportController::class, 'generateBrief'])->name('api.ai-writer.generate-brief');
		Route::post('/generate-outline', [AiSupportController::class, 'generateOutline'])->name('api.ai-writer.generate-outline');
		Route::post('/generate-article', [AiSupportController::class, 'generateArticle'])->name('api.ai-writer.generate-article');
		Route::post('/check-article', [AiSupportController::class, 'checkArticle'])->name('api.ai-writer.check-article');
	});
	
	// Image generation API routes
	Route::group(['prefix' => 'images'], function () {
		Route::post('/start-batch', [ImageBatchController::class, 'startBatch'])->name('images.api.start.batch');
		Route::get('/batch/{batchId}', [ImageBatchController::class, 'checkBatchStatus'])->name('images.api.check.batch.status');
		Route::post('/get-image-statuses', [ImageBatchController::class, 'getImageStatuses'])->name('images.api.get.image.statuses');
		Route::post('/generate-single', [ImageBatchController::class, 'generateSingle'])->name('images.api.generate.single');
	});
	
	// Article management API routes
	Route::group(['prefix' => 'articles'], function () {
		Route::post('/check-duplicates', [AiSupportController::class, 'checkDuplicateArticles'])->name('api.articles.check-duplicates');
		Route::post('/bulk-save', [AiSupportController::class, 'bulkSaveArticles'])->name('api.articles.bulk-save');
	});
	
	// Categories and Tags API routes
	Route::get('/categories/{type}', [AiSupportController::class, 'getCategoriesForType'])->name('api.categories.type');
	Route::get('/tags/all', [AiSupportController::class, 'getAllTags'])->name('api.tags.all');
});
