<?php

namespace App\Http\Controllers\Api;

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

class RestaurantAuthController extends Controller
{
    /**
     * تسجيل الدخول للمطعم
     */
    public function login(Request $request)
    {
        try {
            // التحقق من البيانات
            $validator = Validator::make($request->all(), [
                'phone' => 'required|string|max:20',
                'password' => 'required|string|min:6',
            ]);

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

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

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

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

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

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

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

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

            return response()->json([
                'success' => true,
                'message' => 'تم تسجيل الدخول بنجاح',
                'token' => $token,
                'user' => [
                    'id' => $user->id,
                    'name' => $user->name,
                    'email' => $user->email,
                    'phone' => $user->phone,
                    'user_type' => $user->user_type,
                    'service_type' => $user->service_type,
                    'status' => $user->status,
                    'is_verified' => $user->is_verified,
                    'profile_image' => $user->profile_image,
                    'notes' => $user->notes,
                    'created_at' => $user->created_at,
                    'updated_at' => $user->updated_at,
                ]
            ]);

        } catch (\Exception $e) {
            \Log::error('خطأ في تسجيل دخول المطعم: ' . $e->getMessage());
            
            return response()->json([
                'success' => false,
                'message' => 'حدث خطأ أثناء تسجيل الدخول'
            ], 500);
        }
    }

    /**
     * تسجيل الخروج
     */
    public function logout(Request $request)
    {
        try {
            // حذف جميع tokens للمستخدم
            $request->user()->tokens()->delete();

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

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

    /**
     * عرض الملف الشخصي
     */
    public function profile(Request $request)
    {
        try {
            $user = $request->user();

            return response()->json([
                'success' => true,
                'user' => [
                    'id' => $user->id,
                    'name' => $user->name,
                    'email' => $user->email,
                    'phone' => $user->phone,
                    'user_type' => $user->user_type,
                    'service_type' => $user->service_type,
                    'status' => $user->status,
                    'is_verified' => $user->is_verified,
                    'profile_image' => $user->profile_image,
                    'notes' => $user->notes,
                    'created_at' => $user->created_at,
                    'updated_at' => $user->updated_at,
                ]
            ]);

        } catch (\Exception $e) {
            \Log::error('خطأ في عرض الملف الشخصي: ' . $e->getMessage());
            
            return response()->json([
                'success' => false,
                'message' => 'حدث خطأ أثناء عرض الملف الشخصي'
            ], 500);
        }
    }

    /**
     * تحديث الملف الشخصي
     */
    public function updateProfile(Request $request)
    {
        try {
            $user = $request->user();

            $validator = Validator::make($request->all(), [
                'name' => 'sometimes|string|max:255',
                'email' => 'sometimes|email|max:255|unique:users,email,' . $user->id,
                'phone' => 'sometimes|string|max:20|unique:users,phone,' . $user->id,
                'profile_image' => 'sometimes|image|mimes:jpeg,png,jpg,gif|max:2048',
            ]);

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

            $updateData = $request->only(['name', 'email', 'phone']);

            // معالجة صورة الملف الشخصي
            if ($request->hasFile('profile_image')) {
                $imagePath = $request->file('profile_image')->store('profile_images', 'public');
                $updateData['profile_image'] = $imagePath;
            }

            $user->update($updateData);

            return response()->json([
                'success' => true,
                'message' => 'تم تحديث الملف الشخصي بنجاح',
                'user' => [
                    'id' => $user->id,
                    'name' => $user->name,
                    'email' => $user->email,
                    'phone' => $user->phone,
                    'user_type' => $user->user_type,
                    'service_type' => $user->service_type,
                    'status' => $user->status,
                    'is_verified' => $user->is_verified,
                    'profile_image' => $user->profile_image,
                    'notes' => $user->notes,
                    'created_at' => $user->created_at,
                    'updated_at' => $user->updated_at,
                ]
            ]);

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