<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\GasOffice;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class GasOfficeAuthController extends Controller
{
    /**
     * تسجيل دخول مالك مكتب الغاز
     */
    public function login(Request $request): JsonResponse
    {
        $validator = Validator::make($request->all(), [
            'phone' => 'required|string',
            'password' => 'required|string|min:6'
        ]);

        if ($validator->fails()) {
            return response()->json([
                'success' => false,
                'message' => 'بيانات غير صحيحة',
                'errors' => $validator->errors()
            ], 422);
        }

        $phone = $request->input('phone');
        $password = $request->input('password');

        // البحث عن المستخدم برقم الهاتف
        $user = User::where('phone', $phone)->first();

        if (!$user) {
            return response()->json([
                'success' => false,
                'message' => 'رقم الهاتف غير مسجل'
            ], 401);
        }

        // التحقق من كلمة المرور
        if (!Hash::check($password, $user->password)) {
            return response()->json([
                'success' => false,
                'message' => 'كلمة المرور غير صحيحة'
            ], 401);
        }

        // التحقق من نوع المستخدم
        if ($user->user_type !== 'gas_manager' && $user->service_type !== 'gas') {
            return response()->json([
                'success' => false,
                'message' => 'هذا الحساب غير مصرح له بالدخول كمدير مكتب غاز'
            ], 403);
        }

        // التحقق من حالة الحساب
        if ($user->status !== 'active') {
            return response()->json([
                'success' => false,
                'message' => 'حسابك غير نشط، يرجى التواصل مع الإدارة'
            ], 403);
        }

        // إنشاء token
        $token = $user->createToken('gas-office-token')->plainTextToken;

        // تحديث آخر دخول
        $user->update(['last_login_at' => now()]);

        // جلب مكتب الغاز
        $gasOffice = GasOffice::where('owner_id', $user->id)->first();

        return response()->json([
            'success' => true,
            'message' => 'تم تسجيل الدخول بنجاح',
            'data' => [
                'user' => $user,
                'gas_office' => $gasOffice,
                'token' => $token,
                'token_type' => 'Bearer'
            ]
        ]);
    }

    /**
     * تسجيل خروج مالك مكتب الغاز
     */
    public function logout(Request $request): JsonResponse
    {
        $request->user()->currentAccessToken()->delete();

        return response()->json([
            'success' => true,
            'message' => 'تم تسجيل الخروج بنجاح'
        ]);
    }

    /**
     * تسجيل حساب جديد لمالك مكتب غاز
     */
    public function register(Request $request): JsonResponse
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'phone' => 'required|string|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'gas_office_name' => 'required|string|max:255',
            'gas_office_description' => 'nullable|string',
            'gas_office_address' => 'required|string',
            'gas_office_phone' => 'required|string',
            'gas_office_email' => 'nullable|email',
            'latitude' => 'nullable|numeric',
            'longitude' => 'nullable|numeric',
            'service_areas' => 'required|array',
            'service_areas.*' => 'string'
        ]);

        if ($validator->fails()) {
            return response()->json([
                'success' => false,
                'message' => 'بيانات غير صحيحة',
                'errors' => $validator->errors()
            ], 422);
        }

        try {
            // إنشاء المستخدم
            $user = User::create([
                'name' => $request->name,
                'email' => $request->email,
                'phone' => $request->phone,
                'password' => Hash::make($request->password),
                'user_type' => 'gas_manager',
                'service_type' => 'gas',
                'status' => 'pending', // يحتاج موافقة الإدارة
                'is_verified' => false
            ]);

            // إنشاء مكتب الغاز
            $gasOffice = GasOffice::create([
                'name' => $request->gas_office_name,
                'description' => $request->gas_office_description,
                'address' => $request->gas_office_address,
                'phone' => $request->gas_office_phone,
                'email' => $request->gas_office_email,
                'owner_id' => $user->id,
                'latitude' => $request->latitude,
                'longitude' => $request->longitude,
                'service_areas' => $request->service_areas,
                'is_active' => false, // يحتاج موافقة الإدارة
                'is_open' => false
            ]);

            return response()->json([
                'success' => true,
                'message' => 'تم إنشاء الحساب بنجاح، يرجى انتظار موافقة الإدارة',
                'data' => [
                    'user' => $user,
                    'gas_office' => $gasOffice
                ]
            ], 201);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'حدث خطأ أثناء إنشاء الحساب',
                'error' => $e->getMessage()
            ], 500);
        }
    }

    /**
     * عرض بيانات الملف الشخصي
     */
    public function profile(Request $request): JsonResponse
    {
        $user = $request->user();
        $gasOffice = GasOffice::where('owner_id', $user->id)->first();

        return response()->json([
            'success' => true,
            'data' => [
                'user' => $user,
                'gas_office' => $gasOffice
            ],
            'message' => 'تم جلب بيانات الملف الشخصي بنجاح'
        ]);
    }

    /**
     * تحديث بيانات الملف الشخصي
     */
    public function updateProfile(Request $request): JsonResponse
    {
        $user = $request->user();
        $gasOffice = GasOffice::where('owner_id', $user->id)->first();

        $validator = Validator::make($request->all(), [
            'name' => 'sometimes|required|string|max:255',
            'phone' => 'sometimes|required|string|unique:users,phone,' . $user->id,
            'gas_office_name' => 'sometimes|required|string|max:255',
            'gas_office_description' => 'nullable|string',
            'gas_office_address' => 'sometimes|required|string',
            'gas_office_phone' => 'sometimes|required|string',
            'gas_office_email' => 'nullable|email',
            'latitude' => 'nullable|numeric',
            'longitude' => 'nullable|numeric',
            'service_areas' => 'sometimes|required|array',
            'service_areas.*' => 'string'
        ]);

        if ($validator->fails()) {
            return response()->json([
                'success' => false,
                'message' => 'بيانات غير صحيحة',
                'errors' => $validator->errors()
            ], 422);
        }

        try {
            // تحديث بيانات المستخدم
            if ($request->has('name')) {
                $user->update(['name' => $request->name]);
            }
            if ($request->has('phone')) {
                $user->update(['phone' => $request->phone]);
            }

            // تحديث بيانات مكتب الغاز
            if ($gasOffice) {
                $gasOfficeData = [];
                if ($request->has('gas_office_name')) $gasOfficeData['name'] = $request->gas_office_name;
                if ($request->has('gas_office_description')) $gasOfficeData['description'] = $request->gas_office_description;
                if ($request->has('gas_office_address')) $gasOfficeData['address'] = $request->gas_office_address;
                if ($request->has('gas_office_phone')) $gasOfficeData['phone'] = $request->gas_office_phone;
                if ($request->has('gas_office_email')) $gasOfficeData['email'] = $request->gas_office_email;
                if ($request->has('latitude')) $gasOfficeData['latitude'] = $request->latitude;
                if ($request->has('longitude')) $gasOfficeData['longitude'] = $request->longitude;
                if ($request->has('service_areas')) $gasOfficeData['service_areas'] = $request->service_areas;

                $gasOffice->update($gasOfficeData);
            }

            return response()->json([
                'success' => true,
                'message' => 'تم تحديث بيانات الملف الشخصي بنجاح'
            ]);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'حدث خطأ أثناء تحديث البيانات',
                'error' => $e->getMessage()
            ], 500);
        }
    }

    /**
     * تغيير كلمة المرور
     */
    public function changePassword(Request $request): JsonResponse
    {
        $validator = Validator::make($request->all(), [
            'current_password' => 'required|string',
            'new_password' => 'required|string|min:6|confirmed'
        ]);

        if ($validator->fails()) {
            return response()->json([
                'success' => false,
                'message' => 'بيانات غير صحيحة',
                'errors' => $validator->errors()
            ], 422);
        }

        $user = $request->user();

        // التحقق من كلمة المرور الحالية
        if (!Hash::check($request->current_password, $user->password)) {
            return response()->json([
                'success' => false,
                'message' => 'كلمة المرور الحالية غير صحيحة'
            ], 400);
        }

        // تحديث كلمة المرور
        $user->update([
            'password' => Hash::make($request->new_password)
        ]);

        return response()->json([
            'success' => true,
            'message' => 'تم تغيير كلمة المرور بنجاح'
        ]);
    }
}
