<?php

namespace App\Http\Controllers\Sites;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Category;
use App\Models\Item;
use App\Models\User;

class SiteController extends Controller
{
    public function music()
    {
        return $this->siteIndex(Category::SITE_MUSIC);
    }

    public function art()
    {
        return $this->siteIndex(Category::SITE_ART);
    }

    public function tools()
    {
        return $this->siteIndex(Category::SITE_TOOLS);
    }

    public function musicItems(Request $request)
    {
        return $this->siteItems($request, Category::SITE_MUSIC);
    }

    public function artItems(Request $request)
    {
        return $this->siteItems($request, Category::SITE_ART);
    }

    public function toolsItems(Request $request)
    {
        return $this->siteItems($request, Category::SITE_TOOLS);
    }

    private function siteIndex($siteGroup)
    {
        $siteInfo = Category::getSiteGroups()[$siteGroup];
        $categories = Category::forSite($siteGroup)->active()->orderBy('sort_order')->get();
        
        $featuredItems = Item::whereHas('category', function($query) use ($siteGroup) {
            $query->forSite($siteGroup);
        })->with(['category', 'user', 'photos'])
        ->where('status', 'active')
        ->latest()
        ->take(8)
        ->get();

        $stats = [
            'total_items' => Item::whereHas('category', function($query) use ($siteGroup) {
                $query->forSite($siteGroup);
            })->count(),
            'active_users' => User::whereHas('items.category', function($query) use ($siteGroup) {
                $query->forSite($siteGroup);
            })->count(),
            'categories_count' => $categories->count()
        ];

        return view('sites.index', compact('siteInfo', 'categories', 'featuredItems', 'stats', 'siteGroup'));
    }

    private function siteItems(Request $request, $siteGroup)
    {
        $siteInfo = Category::getSiteGroups()[$siteGroup];
        $categories = Category::forSite($siteGroup)->active()->orderBy('sort_order')->get();

        $query = Item::whereHas('category', function($q) use ($siteGroup) {
            $q->forSite($siteGroup);
        })->with(['category', 'user', 'photos']);

        // Apply filters (same logic as main marketplace but filtered by site)
        if ($request->filled('search')) {
            $search = $request->search;
            $query->where(function($q) use ($search) {
                $q->where('title', 'like', "%{$search}%")
                  ->orWhere('description', 'like', "%{$search}%");
            });
        }

        if ($request->filled('category')) {
            $query->where('category_id', $request->category);
        }

        if ($request->filled('type')) {
            if ($request->type === 'pre-market') {
                $query->where('listing_type', 'pre-market');
            } else {
                $query->where('listing_type', $request->type);
            }
        }

        // Price filtering
        if ($request->filled('min_price')) {
            $query->where('price', '>=', $request->min_price);
        }
        if ($request->filled('max_price')) {
            $query->where('price', '<=', $request->max_price);
        }

        // Sorting
        $sort = $request->get('sort', 'newest');
        switch ($sort) {
            case 'oldest':
                $query->oldest();
                break;
            case 'price_low':
                $query->orderBy('price', 'asc');
                break;
            case 'price_high':
                $query->orderBy('price', 'desc');
                break;
            default:
                $query->latest();
        }

        $items = $query->where('status', 'active')->paginate(24)->withQueryString();

        return view('sites.items', compact('items', 'categories', 'siteInfo', 'siteGroup'));
    }
}
