<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Governorate;
use App\Models\City;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class GovernorateController extends Controller
{
    /**
     * عرض قائمة المحافظات
     */
    public function index()
    {
        $governorates = Governorate::withCount('cities')
            ->orderBy('sort_order')
            ->orderBy('name_ar')
            ->paginate(20);

        return view('admin.governorates.index', compact('governorates'));
    }

    /**
     * عرض صفحة إنشاء محافظة جديدة
     */
    public function create()
    {
        return view('admin.governorates.create');
    }

    /**
     * حفظ محافظة جديدة
     */
    public function store(Request $request)
    {
        $request->validate([
            'name_ar' => 'required|string|max:255|unique:governorates,name_ar',
            'name_en' => 'required|string|max:255|unique:governorates,name_en',
            'code' => 'required|string|max:10|unique:governorates,code',
            'latitude' => 'nullable|numeric|between:-90,90',
            'longitude' => 'nullable|numeric|between:-180,180',
            'sort_order' => 'nullable|integer|min:0',
        ]);

        try {
            DB::beginTransaction();

            $governorate = Governorate::create([
                'name_ar' => $request->name_ar,
                'name_en' => $request->name_en,
                'code' => $request->code,
                'latitude' => $request->latitude,
                'longitude' => $request->longitude,
                'sort_order' => $request->sort_order ?? 0,
                'is_active' => $request->has('is_active'),
            ]);

            DB::commit();

            return redirect()->route('admin.governorates.index')
                ->with('success', 'تم إنشاء المحافظة بنجاح');

        } catch (\Exception $e) {
            DB::rollBack();
            return back()->withInput()
                ->with('error', 'حدث خطأ أثناء إنشاء المحافظة: ' . $e->getMessage());
        }
    }

    /**
     * عرض تفاصيل محافظة معينة
     */
    public function show(Governorate $governorate)
    {
        $governorate->load(['cities' => function($query) {
            $query->orderBy('sort_order')->orderBy('name_ar');
        }]);

        return view('admin.governorates.show', compact('governorate'));
    }

    /**
     * عرض صفحة تعديل محافظة
     */
    public function edit(Governorate $governorate)
    {
        return view('admin.governorates.edit', compact('governorate'));
    }

    /**
     * تحديث محافظة
     */
    public function update(Request $request, Governorate $governorate)
    {
        $request->validate([
            'name_ar' => 'required|string|max:255|unique:governorates,name_ar,' . $governorate->id,
            'name_en' => 'required|string|max:255|unique:governorates,name_en,' . $governorate->id,
            'code' => 'required|string|max:10|unique:governorates,code,' . $governorate->id,
            'latitude' => 'nullable|numeric|between:-90,90',
            'longitude' => 'nullable|numeric|between:-180,180',
            'sort_order' => 'nullable|integer|min:0',
        ]);

        try {
            $governorate->update([
                'name_ar' => $request->name_ar,
                'name_en' => $request->name_en,
                'code' => $request->code,
                'latitude' => $request->latitude,
                'longitude' => $request->longitude,
                'sort_order' => $request->sort_order ?? 0,
                'is_active' => $request->has('is_active'),
            ]);

            return redirect()->route('admin.governorates.index')
                ->with('success', 'تم تحديث المحافظة بنجاح');

        } catch (\Exception $e) {
            return back()->withInput()
                ->with('error', 'حدث خطأ أثناء تحديث المحافظة: ' . $e->getMessage());
        }
    }

    /**
     * حذف محافظة
     */
    public function destroy(Governorate $governorate)
    {
        try {
            // التحقق من وجود مدن مرتبطة
            if ($governorate->cities()->count() > 0) {
                return back()->with('error', 'لا يمكن حذف المحافظة لوجود مدن مرتبطة بها');
            }

            // التحقق من وجود مطاعم مرتبطة
            if ($governorate->restaurants()->count() > 0) {
                return back()->with('error', 'لا يمكن حذف المحافظة لوجود مطاعم مرتبطة بها');
            }

            $governorate->delete();

            return redirect()->route('admin.governorates.index')
                ->with('success', 'تم حذف المحافظة بنجاح');

        } catch (\Exception $e) {
            return back()->with('error', 'حدث خطأ أثناء حذف المحافظة: ' . $e->getMessage());
        }
    }

    /**
     * تبديل حالة المحافظة (نشط/غير نشط)
     */
    public function toggleStatus(Governorate $governorate)
    {
        try {
            $governorate->update(['is_active' => !$governorate->is_active]);

            $status = $governorate->is_active ? 'تفعيل' : 'إلغاء تفعيل';
            return back()->with('success', "تم $status المحافظة بنجاح");

        } catch (\Exception $e) {
            return back()->with('error', 'حدث خطأ أثناء تغيير حالة المحافظة: ' . $e->getMessage());
        }
    }
}
