<?php

namespace App\Http\Controllers;

use App\Models\Product;
use App\Models\ProductShowcase;
use App\Models\ProductShowcaseItem;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class AutoShowcaseController extends Controller
{
    /**
     * Get suggested showcase types
     */
    public function getTypes()
    {
        return response()->json([
            'data' => [
                [
                    'type' => 'best_sellers',
                    'title' => 'پرفروش‌ترین محصولات',
                    'description' => 'محصولاتی که بیشترین فروش را داشته‌اند',
                    'icon' => 'TrendingUp',
                ],
                [
                    'type' => 'discounted',
                    'title' => 'محصولات تخفیف‌دار',
                    'description' => 'محصولاتی که تخفیف دارند',
                    'icon' => 'Percent',
                ],
                [
                    'type' => 'newest',
                    'title' => 'جدیدترین محصولات',
                    'description' => 'تازه‌ترین محصولات اضافه شده',
                    'icon' => 'Sparkles',
                ],
                [
                    'type' => 'featured',
                    'title' => 'محصولات ویژه',
                    'description' => 'محصولات منتخب و برگزیده',
                    'icon' => 'Star',
                ],
                [
                    'type' => 'high_rated',
                    'title' => 'محصولات پربازدید',
                    'description' => 'محصولاتی که بیشترین بازدید را داشته‌اند',
                    'icon' => 'Eye',
                ],
            ]
        ]);
    }

    /**
     * Preview products for a showcase type
     */
    public function previewType(Request $request)
    {
        $validated = $request->validate([
            'type' => 'required|in:best_sellers,discounted,newest,featured,high_rated',
            'limit' => 'nullable|integer|min:1|max:50',
        ]);

        $type = $validated['type'];
        $limit = $validated['limit'] ?? 10;

        $products = $this->getProductsByType($type, $limit);

        return response()->json([
            'data' => $products,
            'count' => $products->count(),
        ]);
    }

    /**
     * Create auto showcase
     */
    public function createAutoShowcase(Request $request)
    {
        $validated = $request->validate([
            'type' => 'required|in:best_sellers,discounted,newest,featured,high_rated',
            'title' => 'nullable|string|max:100',
            'subtitle' => 'nullable|string|max:200',
            'display_type' => 'nullable|in:grid,carousel,list',
            'products_limit' => 'nullable|integer|min:1|max:50',
            'bg_color' => 'nullable|string|max:20',
            'title_color' => 'nullable|string|max:20',
            'is_active' => 'nullable|boolean',
        ]);

        $type = $validated['type'];
        $limit = $validated['products_limit'] ?? 10;

        // Get default title if not provided
        $title = $validated['title'] ?? $this->getDefaultTitle($type);

        // Get products based on type
        $products = $this->getProductsByType($type, $limit);

        if ($products->isEmpty()) {
            return response()->json([
                'message' => 'هیچ محصولی برای این نوع ویترین یافت نشد'
            ], 404);
        }

        // Create showcase
        $showcase = ProductShowcase::create([
            'title' => $title,
            'subtitle' => $validated['subtitle'] ?? null,
            'display_type' => $validated['display_type'] ?? 'grid',
            'products_limit' => $limit,
            'bg_color' => $validated['bg_color'] ?? null,
            'title_color' => $validated['title_color'] ?? null,
            'sort_order' => ProductShowcase::max('sort_order') + 1,
            'is_active' => $validated['is_active'] ?? true,
        ]);

        // Add products to showcase
        foreach ($products as $index => $product) {
            ProductShowcaseItem::create([
                'showcase_id' => $showcase->id,
                'product_id' => $product->id,
                'sort_order' => $index,
            ]);
        }

        return response()->json([
            'message' => 'ویترین با موفقیت ایجاد شد',
            'data' => $showcase->load('items.product')
        ], 201);
    }

    /**
     * Get products by type
     */
    private function getProductsByType($type, $limit)
    {
        switch ($type) {
            case 'best_sellers':
                // محصولات پرفروش - بر اساس تعداد سفارشات
                return Product::select('products.*')
                    ->leftJoin('order_items', 'products.id', '=', 'order_items.product_id')
                    ->groupBy('products.id')
                    ->orderByRaw('COUNT(order_items.id) DESC')
                    ->with(['primaryImage', 'category'])
                    ->where('products.is_active', true)
                    ->take($limit)
                    ->get();

            case 'discounted':
                // محصولات تخفیف‌دار
                return Product::whereNotNull('discount_price')
                    ->where('is_active', true)
                    ->whereRaw('discount_price < price')
                    ->orderByRaw('((price - discount_price) / price) DESC') // بیشترین درصد تخفیف
                    ->with(['primaryImage', 'category'])
                    ->take($limit)
                    ->get();

            case 'newest':
                // جدیدترین محصولات
                return Product::where('is_active', true)
                    ->orderBy('created_at', 'DESC')
                    ->with(['primaryImage', 'category'])
                    ->take($limit)
                    ->get();

            case 'featured':
                // محصولات ویژه - بر اساس فیلد is_featured یا محصولات با بیشترین قیمت
                return Product::where('is_active', true)
                    ->orderByRaw('COALESCE(discount_price, price) DESC')
                    ->with(['primaryImage', 'category'])
                    ->take($limit)
                    ->get();

            case 'high_rated':
                // محصولات پربازدید - بر اساس تعداد بازدید (اگر فیلد view_count دارید)
                // فعلا بر اساس تعداد سفارشات + تاریخ ایجاد
                return Product::select('products.*')
                    ->leftJoin('order_items', 'products.id', '=', 'order_items.product_id')
                    ->groupBy('products.id')
                    ->where('products.is_active', true)
                    ->orderByRaw('COUNT(order_items.id) DESC, products.created_at DESC')
                    ->with(['primaryImage', 'category'])
                    ->take($limit)
                    ->get();

            default:
                return collect();
        }
    }

    /**
     * Get default title for type
     */
    private function getDefaultTitle($type)
    {
        $titles = [
            'best_sellers' => 'پرفروش‌ترین محصولات',
            'discounted' => 'محصولات تخفیف‌دار',
            'newest' => 'جدیدترین محصولات',
            'featured' => 'محصولات ویژه',
            'high_rated' => 'محصولات پربازدید',
        ];

        return $titles[$type] ?? 'ویترین محصولات';
    }
}
