"""
Accounts Views - Authentication and Profile
"""
from django.shortcuts import render, redirect
from django.contrib.auth import login as auth_login
from django.contrib import messages
from django.conf import settings
from config.decorators import login_required_web
from accounts.models import User


def login_view(request):
    """Login page"""
    if request.user.is_authenticated:
        return redirect('/')
    
    if request.method == 'POST':
        # Handle login via API and Django session
        from django.http import JsonResponse
        from django.contrib.auth import authenticate
        import requests
        
        username = request.POST.get('username')
        password = request.POST.get('password')
        
        # Check if this is an AJAX request (from JavaScript)
        if request.headers.get('X-Requested-With') == 'XMLHttpRequest' or request.content_type == 'application/x-www-form-urlencoded':
            # Authenticate user for Django session
            user = None
            if '@' in username:
                # Looks like an email
                try:
                    user_obj = User.objects.get(email=username)
                    user = authenticate(username=user_obj.username, password=password)
                except User.DoesNotExist:
                    pass
            else:
                # Looks like a username
                user = authenticate(username=username, password=password)
            
            # If still not found, try both
            if user is None and '@' not in username:
                try:
                    user_obj = User.objects.get(email=username)
                    user = authenticate(username=user_obj.username, password=password)
                except User.DoesNotExist:
                    pass
            
            if user and user.is_active:
                auth_login(request, user)
                if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
                    return JsonResponse({'success': True, 'message': 'تم تسجيل الدخول بنجاح'})
                messages.success(request, 'تم تسجيل الدخول بنجاح')
                next_url = request.GET.get('next', '/')
                return redirect(next_url)
            else:
                if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
                    return JsonResponse({'success': False, 'error': 'بيانات الدخول غير صحيحة'}, status=401)
                messages.error(request, 'بيانات الدخول غير صحيحة')
        else:
            # Regular form submission
            try:
                response = requests.post(
                    f'{request.scheme}://{request.get_host()}/api/auth/login/',
                    json={'username': username, 'password': password}
                )
                
                if response.status_code == 200:
                    data = response.json()
                    # Authenticate and login to Django session
                    user = None
                    if '@' in username:
                        try:
                            user_obj = User.objects.get(email=username)
                            user = authenticate(username=user_obj.username, password=password)
                        except User.DoesNotExist:
                            pass
                    else:
                        user = authenticate(username=username, password=password)
                    
                    if user is None and '@' not in username:
                        try:
                            user_obj = User.objects.get(email=username)
                            user = authenticate(username=user_obj.username, password=password)
                        except User.DoesNotExist:
                            pass
                    
                    if user and user.is_active:
                        auth_login(request, user)
                        messages.success(request, 'تم تسجيل الدخول بنجاح')
                        next_url = request.GET.get('next', '/')
                        return redirect(next_url)
                    else:
                        messages.error(request, 'فشل تسجيل الدخول')
                else:
                    error_data = response.json()
                    messages.error(request, error_data.get('error', 'فشل تسجيل الدخول'))
            except Exception as e:
                messages.error(request, 'حدث خطأ أثناء تسجيل الدخول')
    
    context = {
        'title': 'تسجيل الدخول - دليلك IQ',
        'description': 'سجل دخولك للوصول إلى جميع الميزات',
    }
    return render(request, 'accounts/login.html', context)


def register_view(request):
    """Registration page"""
    if request.user.is_authenticated:
        return redirect('/')
    
    if request.method == 'POST':
        # Handle registration via API
        from django.http import JsonResponse
        import requests
        
        data = {
            'username': request.POST.get('username'),
            'email': request.POST.get('email'),
            'phone': request.POST.get('phone'),
            'password': request.POST.get('password'),
            'password_confirm': request.POST.get('password_confirm'),
        }
        
        try:
            response = requests.post(
                f'{request.scheme}://{request.get_host()}/api/auth/register/',
                json=data
            )
            
            if response.status_code == 201:
                response_data = response.json()
                user = User.objects.get(username=data['username'])
                auth_login(request, user)
                messages.success(request, 'تم إنشاء الحساب بنجاح')
                return redirect('/')
            else:
                error_data = response.json()
                messages.error(request, error_data.get('error', 'فشل التسجيل'))
        except Exception as e:
            messages.error(request, 'حدث خطأ أثناء التسجيل')
    
    context = {
        'title': 'إنشاء حساب - دليلك IQ',
        'description': 'أنشئ حسابك للاستفادة من جميع الميزات',
    }
    return render(request, 'accounts/register.html', context)


@login_required_web
def profile_view(request):
    """User profile page"""
    context = {
        'title': 'الملف الشخصي - دليلك IQ',
        'description': 'إدارة ملفك الشخصي',
        'user': request.user,
    }
    return render(request, 'accounts/profile.html', context)


def password_reset_view(request):
    """Password reset page"""
    context = {
        'title': 'إعادة تعيين كلمة المرور - دليلك IQ',
        'description': 'أعد تعيين كلمة المرور الخاصة بك',
    }
    return render(request, 'accounts/password_reset.html', context)
