<?php

use App\Http\Controllers\ProfileController;
use App\Http\Controllers\MarketplaceController;
use App\Http\Controllers\ItemController;
use App\Http\Controllers\OfferController;
use App\Http\Controllers\CategoryController;
use App\Http\Controllers\MessageController;
use App\Http\Controllers\DealController;
use App\Http\Controllers\AnnouncementController;
use App\Http\Controllers\SitemapController;
use App\Http\Controllers\FooterController;
use Illuminate\Support\Facades\Route;

Route::get('/', function() {
    return redirect()->route('items.index');
});
Route::get('/feed', [MarketplaceController::class, 'feed'])->name('marketplace.feed');
Route::get('/sitemap.xml', [SitemapController::class, 'index'])->name('sitemap');

// Name availability check for registration
Route::get('/check-name-availability', function(Illuminate\Http\Request $request) {
    $name = $request->get('name');
    
    if (strlen($name) < 2) {
        return response()->json(['available' => null]);
    }
    
    $exists = App\Models\User::where('name', $name)->exists();
    
    return response()->json(['available' => !$exists]);
})->name('check.name.availability');

// Email availability check for registration
// Always returns available: null to prevent email enumeration attacks
Route::get('/check-email-availability', function(Illuminate\Http\Request $request) {
    return response()->json(['available' => null]);
})->name('check.email.availability');

Route::get('/dashboard', function () {
    if (auth()->user()->is_active) {
        return view('dashboard');
    } else {
        return view('dashboard-banned');
    }
})->middleware(['auth', 'verified', 'onboarding'])->name('dashboard');

// Public marketplace routes
Route::get('/items', [ItemController::class, 'index'])->name('items.index');
Route::get('/items/{item}', [ItemController::class, 'show'])->name('items.show');
Route::get('/categories', [CategoryController::class, 'index'])->name('categories.index');
Route::get('/categories/{category}', [CategoryController::class, 'show'])->name('categories.show');
Route::get('/sellers/{user}', [\App\Http\Controllers\UserController::class, 'publicProfile'])->name('sellers.profile');

// Public deals routes
Route::get('/deals', [DealController::class, 'index'])->name('deals.index');

// Announcement routes
Route::post('/announcements/{announcement}/dismiss', [AnnouncementController::class, 'dismiss'])
    ->name('announcements.dismiss');

// Footer routes - public
Route::get('/contact', [FooterController::class, 'showContact'])->name('contact');
Route::post('/contact', [FooterController::class, 'submitContact'])->name('contact.submit');
Route::get('/report-abuse', [FooterController::class, 'showAbuse'])->name('abuse.report');
Route::post('/newsletter/subscribe', [FooterController::class, 'subscribeNewsletter'])->name('newsletter.subscribe');

// Authenticated user routes
Route::middleware(['auth', 'verified', 'onboarding'])->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::patch('/profile/payment-methods', [ProfileController::class, 'updatePaymentMethods'])->name('profile.payment-methods');
    Route::patch('/profile/vacation-mode', [ProfileController::class, 'updateVacationMode'])->name('profile.vacation-mode');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
    
    // Photo management (available to all authenticated users)
    Route::post('/items/{item}/photos', [ItemController::class, 'uploadPhoto'])->name('items.photos.upload');
    Route::delete('/items/{item}/photos/{photo}', [ItemController::class, 'deletePhoto'])->name('items.photos.delete');
    
    // Item management (restricted to active users)
    Route::middleware('active.user')->group(function () {
        // Redirect /my-items to my-listings
        Route::get('/my-items', function() {
            return redirect()->route('items.my-listings');
        })->name('my-items.index');
        
        Route::resource('my-items', ItemController::class, ['parameters' => ['my-items' => 'item']])->except(['index', 'show']);
        Route::get('/my-items/create-classic', [ItemController::class, 'createClassic'])->name('my-items.create-classic');
        Route::get('/items/{item}/checkout', [ItemController::class, 'checkout'])->name('items.checkout');
        Route::post('/items/{item}/buy', [ItemController::class, 'buy'])->name('items.buy');
        Route::delete('/items/{item}/queue', [ItemController::class, 'leaveQueue'])->name('items.queue.leave');
        Route::delete('/items/{item}/queue/{user}', [ItemController::class, 'removeFromQueue'])->name('items.queue.remove');
        
        // Watchlist
        Route::post('/items/{item}/watchlist', [ItemController::class, 'addToWatchlist'])->name('items.watchlist.add');
        Route::delete('/items/{item}/watchlist', [ItemController::class, 'removeFromWatchlist'])->name('items.watchlist.remove');

        // Offers
        Route::post('/items/{item}/offers', [OfferController::class, 'store'])->name('offers.store');
        Route::post('/offers/{offer}/accept', [OfferController::class, 'acceptOffer'])->name('offers.accept');
        Route::post('/offers/{offer}/counter', [OfferController::class, 'counterOffer'])->name('offers.counter');
        Route::post('/offers/{offer}/reject', [OfferController::class, 'reject'])->name('offers.reject');
        Route::post('/offers/{offer}/withdraw', [OfferController::class, 'withdraw'])->name('offers.withdraw');
        Route::get('/my-offers', [OfferController::class, 'myOffers'])->name('offers.index');

        // User dashboard sections (except messages)
        Route::get('/my-listings', [ItemController::class, 'myListings'])->name('items.my-listings');
        Route::get('/my-inventory', [ItemController::class, 'myInventory'])->name('items.my-inventory');
        Route::get('/my-drafts', [ItemController::class, 'myDrafts'])->name('items.my-drafts');
        Route::post('/items/{item}/publish', [ItemController::class, 'publishDraft'])->name('items.publish');
        Route::get('/my-purchases', [ItemController::class, 'myPurchases'])->name('items.my-purchases');
        Route::get('/my-sales', [ItemController::class, 'mySales'])->name('items.my-sales');
        Route::get('/my-watchlist', [ItemController::class, 'myWatchlist'])->name('items.my-watchlist');
        
        // Mass Listing
        Route::get('/mass-listing', [ItemController::class, 'massListing'])->name('items.mass-listing');
        Route::post('/mass-listing', [ItemController::class, 'storeMassListing'])->name('items.store-mass-listing');
        Route::get('/mass-listing/review', [ItemController::class, 'reviewMassListing'])->name('items.review-mass-listing');
        Route::post('/mass-listing/create-all', [ItemController::class, 'createAllDrafts'])->name('items.create-all-drafts');
        Route::get('/mass-listing/review-quick', [ItemController::class, 'reviewMassListingQuick'])->name('items.review-mass-listing-quick');
        Route::post('/mass-listing/create-all-live', [ItemController::class, 'createAllLive'])->name('items.create-all-live');
        
        // Queue Management and Sales
        Route::get('/items/{item}/manage-queue', [ItemController::class, 'manageQueue'])->name('items.manage-queue');
        Route::post('/items/{item}/mark-sold', [ItemController::class, 'markSold'])->name('items.mark-sold');
        
        // Create categories and manufacturers
        Route::post('/categories', [ItemController::class, 'storeCategory'])->name('categories.store');
        Route::post('/manufacturers', [ItemController::class, 'storeManufacturer'])->name('manufacturers.store');
        
        // API endpoints for dynamic form fields
        Route::post('/api/categories', [ItemController::class, 'apiStoreCategory'])->name('api.categories.store');
        Route::post('/api/manufacturers', [ItemController::class, 'apiStoreManufacturer'])->name('api.manufacturers.store');
        
    });
    
    // Deal routes (authenticated users only - no onboarding required)
    Route::middleware(['auth', 'verified'])->group(function () {
        Route::get('/deals/create', [DealController::class, 'create'])->name('deals.create');
        Route::post('/deals', [DealController::class, 'store'])->name('deals.store');
        Route::post('/deals/{deal}/comment', [DealController::class, 'addComment'])->name('deals.comment');
        Route::post('/deals/{deal}/vote', [DealController::class, 'vote'])->name('deals.vote');
        Route::post('/deals/parse-url', [DealController::class, 'parseUrl'])->name('deals.parse-url');
    });

    // Public deal show route (must come after deals/create to avoid conflicts)
    Route::get('/deals/{deal}', [DealController::class, 'show'])->name('deals.show');

    // Transactions
    Route::middleware(['auth', 'verified'])->group(function () {
        Route::get('/my-transactions', [\App\Http\Controllers\TransactionController::class, 'myTransactions'])->name('transactions.index');
        Route::get('/transactions/{transaction}', [\App\Http\Controllers\TransactionController::class, 'show'])->name('transactions.show');
        Route::post('/transactions/{transaction}/tracking', [\App\Http\Controllers\TransactionController::class, 'addTracking'])->name('transactions.add-tracking');
        Route::post('/transactions/{transaction}/confirm', [\App\Http\Controllers\TransactionController::class, 'confirmReceipt'])->name('transactions.confirm-receipt');
        Route::post('/transactions/{transaction}/feedback', [\App\Http\Controllers\TransactionController::class, 'storeFeedback'])->name('transactions.feedback');
    });
    
    // Messaging
    Route::get('/messages', [MessageController::class, 'index'])->name('messages.index');
    Route::get('/messages/{conversation}', [MessageController::class, 'show'])->name('messages.show');
    Route::post('/messages/{conversation}/reply', [MessageController::class, 'reply'])->name('messages.reply');
    Route::get('/items/{item}/message', [MessageController::class, 'showMessageForm'])->name('items.message');
    Route::post('/items/{item}/message', [MessageController::class, 'createFromItem'])->name('items.message.store');
    
    // Onboarding and Preferences
    Route::get('/onboarding', [\App\Http\Controllers\OnboardingController::class, 'show'])->name('onboarding.show');
    Route::post('/onboarding', [\App\Http\Controllers\OnboardingController::class, 'store'])->name('onboarding.store');
    Route::post('/onboarding/skip', [\App\Http\Controllers\OnboardingController::class, 'skip'])->name('onboarding.skip');
    Route::get('/preferences', [\App\Http\Controllers\OnboardingController::class, 'show'])->name('preferences.edit');
    Route::post('/preferences', [\App\Http\Controllers\OnboardingController::class, 'store'])->name('preferences.update');
    
    // Admin contact for banned users
    Route::get('/contact-admin', [MessageController::class, 'contactAdmin'])->name('messages.contact-admin');
    Route::post('/contact-admin', [MessageController::class, 'sendToAdmin'])->name('messages.send-to-admin');
    
    // Direct messaging between users
    Route::post('/messages/create-direct', [MessageController::class, 'createDirectConversation'])->name('messages.create-direct');
    
    // Reporting system
    Route::get('/report', [\App\Http\Controllers\ReportController::class, 'create'])->name('reports.create');
    Route::post('/report', [\App\Http\Controllers\ReportController::class, 'store'])->name('reports.store');

    // Trust/verification system (user-facing)
    Route::post('/trust/{service}/request', [\App\Http\Controllers\UserTrustController::class, 'store'])->name('trust.store');
    Route::post('/trust-links/{link}/proof', [\App\Http\Controllers\UserTrustController::class, 'submitProof'])->name('trust.proof');

    // Behavioral tracking
    Route::post('/track-interaction', function(\Illuminate\Http\Request $request) {
        $validated = $request->validate([
            'item_id' => 'required|exists:items,id',
            'interaction_type' => 'required|in:click,view,hover',
            'metadata' => 'nullable|array'
        ]);
        
        \App\Models\UserInteraction::track(
            $validated['item_id'], 
            $validated['interaction_type'], 
            $validated['metadata'] ?? []
        );
        
        return response()->json(['success' => true]);
    })->name('track.interaction');
    
});

// Admin routes
Route::prefix('admin')->name('admin.')->middleware(['admin'])->group(function () {
    Route::get('/', [\App\Http\Controllers\Admin\AdminController::class, 'index'])->name('dashboard');
    
    // Admin Items
    Route::get('/items', [\App\Http\Controllers\Admin\AdminItemController::class, 'index'])->name('items.index');
    Route::get('/items/{item}', [\App\Http\Controllers\Admin\AdminItemController::class, 'show'])->name('items.show');
    Route::patch('/items/{item}', [\App\Http\Controllers\Admin\AdminItemController::class, 'update'])->name('items.update');
    Route::delete('/items/{item}', [\App\Http\Controllers\Admin\AdminItemController::class, 'destroy'])->name('items.destroy');
    Route::post('/items/{item}/remove', [\App\Http\Controllers\Admin\AdminItemController::class, 'remove'])->name('items.remove');
    Route::post('/items/{item}/approve', [\App\Http\Controllers\Admin\AdminItemController::class, 'approve'])->name('items.approve');
    
    // Admin Users
    Route::get('/users', [\App\Http\Controllers\Admin\AdminUserController::class, 'index'])->name('users.index');
    Route::get('/users/{user}', [\App\Http\Controllers\Admin\AdminUserController::class, 'show'])->name('users.show');
    Route::patch('/users/{user}', [\App\Http\Controllers\Admin\AdminUserController::class, 'update'])->name('users.update');
    Route::post('/users/{user}/ban', [\App\Http\Controllers\Admin\AdminUserController::class, 'ban'])->name('users.ban');
    Route::post('/users/{user}/unban', [\App\Http\Controllers\Admin\AdminUserController::class, 'unban'])->name('users.unban');
    Route::post('/users/{user}/approve', [\App\Http\Controllers\Admin\AdminUserController::class, 'approve'])->name('users.approve');
    Route::post('/users/{user}/flag',    [\App\Http\Controllers\Admin\AdminUserController::class, 'flag'])->name('users.flag');
Route::post('/users/{user}/impersonate', [\App\Http\Controllers\Admin\AdminUserController::class, 'impersonate'])->name('users.impersonate');
    Route::post('/stop-impersonating', [\App\Http\Controllers\Admin\AdminUserController::class, 'stopImpersonating'])->name('users.stop-impersonating');
    
    // Admin Reports
    Route::get('/reports', [\App\Http\Controllers\Admin\AdminReportController::class, 'index'])->name('reports.index');
    Route::get('/reports/{report}', [\App\Http\Controllers\Admin\AdminReportController::class, 'show'])->name('reports.show');
    Route::post('/reports/{report}/review', [\App\Http\Controllers\Admin\AdminReportController::class, 'review'])->name('reports.review');
    Route::post('/reports/{report}/resolve', [\App\Http\Controllers\Admin\AdminReportController::class, 'resolve'])->name('reports.resolve');
    Route::post('/reports/{report}/dismiss', [\App\Http\Controllers\Admin\AdminReportController::class, 'dismiss'])->name('reports.dismiss');
    
    // Admin Settings
    Route::get('/settings', [\App\Http\Controllers\Admin\AdminSettingController::class, 'index'])->name('settings.index');
    Route::post('/settings', [\App\Http\Controllers\Admin\AdminSettingController::class, 'update'])->name('settings.update');
    
    // Analytics
    Route::get('/analytics', [\App\Http\Controllers\Admin\AnalyticsController::class, 'index'])->name('analytics.index');
    Route::get('/analytics/users/{user}', [\App\Http\Controllers\Admin\AnalyticsController::class, 'userDetails'])->name('analytics.user-details');
    Route::get('/analytics/items/{item}', [\App\Http\Controllers\Admin\AnalyticsController::class, 'itemDetails'])->name('analytics.item-details');
    Route::get('/analytics/realtime', [\App\Http\Controllers\Admin\AnalyticsController::class, 'realtime'])->name('analytics.realtime');
    Route::get('/analytics/export', [\App\Http\Controllers\Admin\AnalyticsController::class, 'export'])->name('analytics.export');
    
    // Audit Log
    Route::get('/audit-log', [\App\Http\Controllers\Admin\AdminAuditLogController::class, 'index'])->name('audit-log.index');

    // Admin Deals
    Route::get('/deals', [\App\Http\Controllers\Admin\AdminDealController::class, 'index'])->name('deals.index');
    Route::get('/deals/{deal}', [\App\Http\Controllers\Admin\AdminDealController::class, 'show'])->name('deals.show');
    Route::get('/deals/{deal}/edit', [\App\Http\Controllers\Admin\AdminDealController::class, 'edit'])->name('deals.edit');
    Route::patch('/deals/{deal}', [\App\Http\Controllers\Admin\AdminDealController::class, 'update'])->name('deals.update');
    Route::delete('/deals/{deal}', [\App\Http\Controllers\Admin\AdminDealController::class, 'destroy'])->name('deals.destroy');
    Route::post('/deals/{deal}/toggle-pin', [\App\Http\Controllers\Admin\AdminDealController::class, 'togglePin'])->name('deals.toggle-pin');
    Route::post('/deals/{deal}/toggle-active', [\App\Http\Controllers\Admin\AdminDealController::class, 'toggleActive'])->name('deals.toggle-active');

    // Admin Announcements
    Route::get('/announcements', [\App\Http\Controllers\Admin\AdminAnnouncementController::class, 'index'])->name('announcements.index');
    Route::get('/announcements/create', [\App\Http\Controllers\Admin\AdminAnnouncementController::class, 'create'])->name('announcements.create');
    Route::post('/announcements', [\App\Http\Controllers\Admin\AdminAnnouncementController::class, 'store'])->name('announcements.store');
    Route::get('/announcements/{announcement}/edit', [\App\Http\Controllers\Admin\AdminAnnouncementController::class, 'edit'])->name('announcements.edit');
    Route::patch('/announcements/{announcement}', [\App\Http\Controllers\Admin\AdminAnnouncementController::class, 'update'])->name('announcements.update');
    Route::delete('/announcements/{announcement}', [\App\Http\Controllers\Admin\AdminAnnouncementController::class, 'destroy'])->name('announcements.destroy');
    Route::post('/announcements/{announcement}/toggle-active', [\App\Http\Controllers\Admin\AdminAnnouncementController::class, 'toggleActive'])->name('announcements.toggle-active');

    // Admin Trust Services & Links
    Route::prefix('trust-services')->name('trust-services.')->group(function () {
        Route::get('/', [\App\Http\Controllers\Admin\AdminTrustServiceController::class, 'index'])->name('index');
        Route::get('/create', [\App\Http\Controllers\Admin\AdminTrustServiceController::class, 'create'])->name('create');
        Route::post('/', [\App\Http\Controllers\Admin\AdminTrustServiceController::class, 'store'])->name('store');
        Route::get('/{service}/edit', [\App\Http\Controllers\Admin\AdminTrustServiceController::class, 'edit'])->name('edit');
        Route::patch('/{service}', [\App\Http\Controllers\Admin\AdminTrustServiceController::class, 'update'])->name('update');
        Route::delete('/{service}', [\App\Http\Controllers\Admin\AdminTrustServiceController::class, 'destroy'])->name('destroy');
    });
    Route::post('/users/{user}/trust', [\App\Http\Controllers\Admin\AdminUserTrustController::class, 'store'])->name('users.trust.store');
    Route::patch('/trust-links/{link}', [\App\Http\Controllers\Admin\AdminUserTrustController::class, 'update'])->name('trust-links.update');
    Route::delete('/trust-links/{link}', [\App\Http\Controllers\Admin\AdminUserTrustController::class, 'destroy'])->name('trust-links.destroy');
    Route::post('/trust-links/{link}/verify', [\App\Http\Controllers\Admin\AdminUserTrustController::class, 'verify'])->name('trust-links.verify');
    Route::post('/trust-links/{link}/check-proof', [\App\Http\Controllers\Admin\AdminUserTrustController::class, 'checkProof'])->name('trust-links.check-proof');
});

// Site-specific routes
Route::prefix('music')->name('sites.music.')->group(function () {
    Route::get('/', [\App\Http\Controllers\Sites\SiteController::class, 'music'])->name('index');
    Route::get('/items', [\App\Http\Controllers\Sites\SiteController::class, 'musicItems'])->name('items');
});

if (config('app.multi_site')) {
    Route::prefix('art')->name('sites.art.')->group(function () {
        Route::get('/', [\App\Http\Controllers\Sites\SiteController::class, 'art'])->name('index');
        Route::get('/items', [\App\Http\Controllers\Sites\SiteController::class, 'artItems'])->name('items');
    });

    Route::prefix('tools')->name('sites.tools.')->group(function () {
        Route::get('/', [\App\Http\Controllers\Sites\SiteController::class, 'tools'])->name('index');
        Route::get('/items', [\App\Http\Controllers\Sites\SiteController::class, 'toolsItems'])->name('items');
    });
}

require __DIR__.'/auth.php';
