<?php

namespace App\Http\Controllers;

use App\Models\HomeSection;
use App\Models\ProductShowcase;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class HomeSectionController extends Controller
{
    // Public: Get visible sections with data
    public function index()
    {
        $sections = HomeSection::visible()
            ->ordered()
            ->get()
            ->map(function ($section) {
                return [
                    'id' => $section->id,
                    'section_type' => $section->section_type,
                    'title' => $section->title,
                    'sort_order' => $section->sort_order,
                    'settings' => $section->settings,
                    'data' => $section->getData(),
                ];
            });

        return response()->json([
            'message' => 'بخش‌های صفحه اصلی',
            'data' => $sections
        ]);
    }

    // Admin: Get all sections
    public function adminIndex()
    {
        $sections = HomeSection::ordered()->get();

        return response()->json([
            'message' => 'لیست بخش‌ها',
            'data' => $sections
        ]);
    }

    // Admin: Get available section types
    public function getAvailableTypes()
    {
        $types = [
            [
                'value' => 'hero_banner',
                'label' => 'بنر اصلی (کراوسل)',
                'icon' => '🎪',
                'description' => 'اسلایدر بنرهای اصلی',
                'has_reference' => true,
                'reference_type' => 'banner_group',
            ],
            [
                'value' => 'home_features',
                'label' => 'ویژگی‌های سایت',
                'icon' => '✨',
                'description' => 'ارسال رایگان، پشتیبانی 24/7 و...',
                'has_reference' => false,
            ],
            [
                'value' => 'product_showcase',
                'label' => 'ویترین محصولات',
                'icon' => '🛍️',
                'description' => 'نمایش مجموعه محصولات (پرفروش، تخفیف‌دار و...)',
                'has_reference' => true,
                'reference_type' => 'showcase',
            ],
            [
                'value' => 'flash_sales',
                'label' => 'فروش ویژه',
                'icon' => '🔥',
                'description' => 'محصولات با تخفیف زمان‌دار',
                'has_reference' => false,
            ],
            [
                'value' => 'products_grid',
                'label' => 'لیست محصولات',
                'icon' => '📦',
                'description' => 'نمایش تمام محصولات با فیلتر دسته‌بندی',
                'has_reference' => false,
            ],
            [
                'value' => 'categories',
                'label' => 'دسته‌بندی‌ها',
                'icon' => '📂',
                'description' => 'نمایش دسته‌بندی محصولات',
                'has_reference' => false,
            ],
            [
                'value' => 'pages',
                'label' => 'صفحات',
                'icon' => '📄',
                'description' => 'نمایش لیست صفحات سایت (درباره ما، تماس و...)',
                'has_reference' => false,
            ],
            [
                'value' => 'custom_grid',
                'label' => 'Grid سفارشی',
                'icon' => '🎴',
                'description' => 'نمایش کارت‌های طراحی شده با Grid Builder',
                'has_reference' => true,
                'reference_type' => 'layout',
            ],
            [
                'value' => 'divider',
                'label' => 'جداکننده (Divider)',
                'icon' => '➖',
                'description' => 'خط جداکننده با عنوان و تنظیمات',
                'has_reference' => false, // Changed to false - will use settings instead
            ],
        ];

        // Get available showcases for reference
        $showcases = ProductShowcase::active()->ordered()->get(['id', 'title']);
        
        // Get available custom grid layouts for reference
        $layouts = \App\Models\CustomCardLayout::where('is_active', true)
            ->orderBy('sort_order')
            ->get(['id', 'name']);

        // Get available dividers for reference
        $dividers = \App\Models\Divider::where('is_active', true)
            ->orderBy('sort_order')
            ->get(['id', 'title']);

        // Get available banner groups for reference
        $bannerGroups = \App\Models\Banner::select('group')
            ->where('is_active', true)
            ->whereNotNull('group')
            ->groupBy('group')
            ->orderBy('group')
            ->get()
            ->map(function($item) {
                return [
                    'id' => $item->group, // Use group name as id
                    'name' => $item->group === 'default' ? 'کاروسل پیش‌فرض' : $item->group,
                ];
            });

        // Get available categories for selection
        $categories = \App\Models\Category::where('is_active', true)
            ->orderBy('sort_order')
            ->get(['id', 'name', 'sort_order']);

        // Get available products for selection
        $products = \App\Models\Product::where('is_active', true)
            ->with('primaryImage')
            ->orderBy('created_at', 'desc')
            ->get(['id', 'name', 'price', 'discount_price', 'stock']);

        return response()->json([
            'message' => 'انواع بخش‌های قابل نمایش',
            'data' => [
                'types' => $types,
                'showcases' => $showcases,
                'layouts' => $layouts,
                'dividers' => $dividers,
                'bannerGroups' => $bannerGroups,
                'categories' => $categories,
                'products' => $products,
            ]
        ]);
    }

    // Admin: Create section
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'section_type' => 'required|in:hero_banner,home_features,product_showcase,flash_sales,products_grid,pages,categories,custom_grid,divider',
            'title' => 'nullable|string|max:255',
            'reference_id' => 'nullable|integer',
            'sort_order' => 'integer',
            'is_visible' => 'boolean',
            'settings' => 'nullable|array',
        ]);

        if ($validator->fails()) {
            return response()->json([
                'message' => 'اطلاعات نامعتبر است',
                'errors' => $validator->errors()
            ], 422);
        }

        $section = HomeSection::create($request->all());

        return response()->json([
            'message' => 'بخش با موفقیت ایجاد شد',
            'data' => $section
        ], 201);
    }

    // Admin: Update section
    public function update(Request $request, $id)
    {
        $section = HomeSection::findOrFail($id);

        $validator = Validator::make($request->all(), [
            'section_type' => 'required|in:hero_banner,home_features,product_showcase,flash_sales,products_grid,pages,categories,custom_grid,divider',
            'title' => 'nullable|string|max:255',
            'reference_id' => 'nullable|integer',
            'sort_order' => 'integer',
            'is_visible' => 'boolean',
            'settings' => 'nullable|array',
        ]);

        if ($validator->fails()) {
            return response()->json([
                'message' => 'اطلاعات نامعتبر است',
                'errors' => $validator->errors()
            ], 422);
        }

        $section->update($request->all());

        return response()->json([
            'message' => 'بخش با موفقیت ویرایش شد',
            'data' => $section
        ]);
    }

    // Admin: Delete section
    public function destroy($id)
    {
        $section = HomeSection::findOrFail($id);
        $section->delete();

        return response()->json([
            'message' => 'بخش حذف شد'
        ]);
    }

    // Admin: Reorder sections
    public function reorder(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'sections' => 'required|array',
            'sections.*.id' => 'required|exists:home_sections,id',
            'sections.*.sort_order' => 'required|integer',
        ]);

        if ($validator->fails()) {
            return response()->json([
                'message' => 'اطلاعات نامعتبر است',
                'errors' => $validator->errors()
            ], 422);
        }

        foreach ($request->sections as $item) {
            HomeSection::where('id', $item['id'])->update(['sort_order' => $item['sort_order']]);
        }

        return response()->json([
            'message' => 'ترتیب بخش‌ها با موفقیت ذخیره شد'
        ]);
    }

    // Admin: Toggle visibility
    public function toggleVisibility($id)
    {
        $section = HomeSection::findOrFail($id);
        $section->update(['is_visible' => !$section->is_visible]);

        return response()->json([
            'message' => 'وضعیت نمایش تغییر کرد',
            'data' => $section
        ]);
    }
}
