from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth import login
from django.http import JsonResponse
from django.utils import timezone
from .models import User, OTPCode
import random
import json

# ========== مرحله ۱: درخواست کد تایید ==========
def request_otp_view(request):
    if request.method == 'POST':
        phone = request.POST.get('phone')
        
        # اعتبارسنجی شماره
        if not phone or len(phone) < 11:
            messages.error(request, "شماره موبایل معتبر نیست")
            return render(request, 'accounts/request_otp.html')
        
        # حذف کدهای قبلی منقضی شده
        OTPCode.objects.filter(phone=phone, is_used=False).update(is_used=True)
        
        # ساخت کد جدید
        otp = OTPCode.objects.create(phone=phone)
        
        # 📌 چاپ کد در کنسول (برای تست)
        print("=" * 50)
        print(f"📱 شماره موبایل: {phone}")
        print(f"🔑 کد تایید شما: {otp.code}")
        print("⏱️  این کد تا ۲ دقیقه دیگر منقضی می‌شود")
        print("=" * 50)
        
        # نمایش کد به کاربر (برای تست)
        messages.success(request, f"✅ کد تایید شما: {otp.code}")
        
        # ذخیره شماره در سشن برای مرحله بعد
        request.session['otp_phone'] = phone
        
        return redirect('accounts:verify_otp')
    
    # درخواست GET - فقط صفحه رو نشون بده
    return render(request, 'accounts/request_otp.html')


# ========== مرحله ۲: تایید کد ==========
def verify_otp_view(request):
    phone = request.session.get('otp_phone')
    
    if not phone:
        messages.error(request, "لطفاً ابتدا شماره موبایل را وارد کنید")
        return redirect('accounts:request_otp')
    
    if request.method == 'POST':
        code = request.POST.get('code')
        
        if not code:
            messages.error(request, "لطفاً کد تایید را وارد کنید")
            return render(request, 'accounts/verify_otp.html', {'phone': phone})
        
        try:
            otp = OTPCode.objects.get(phone=phone, code=code, is_used=False)
            
            if otp.is_valid():
                # کد معتبر است
                otp.is_used = True
                otp.save()
                
                # آیا کاربر قبلاً ثبت نام کرده؟
                user, created = User.objects.get_or_create(
                    phone=phone,
                    defaults={'username': phone}
                )
                
                # لاگین کاربر
                login(request, user)
                
                # اگر پروفایل کامل نیست، به صفحه تکمیل اطلاعات بره
                if not user.is_profile_complete:
                    return redirect('accounts:complete_profile')
                else:
                    # اگه کاربر از صفحه خرید اومده بود، به اونجا برگردون
                    next_url = request.session.get('next_url', 'shop:home')
                    return redirect(next_url)
            
            else:
                messages.error(request, "کد منقضی شده یا اشتباه است")
                
        except OTPCode.DoesNotExist:
            messages.error(request, "کد وارد شده صحیح نیست")
    
    return render(request, 'accounts/verify_otp.html', {'phone': phone})


# ========== مرحله ۳: تکمیل پروفایل ==========
def complete_profile_view(request):
    if not request.user.is_authenticated:
        return redirect('accounts:request_otp')
    
    if request.method == 'POST':
        full_name = request.POST.get('full_name')
        address = request.POST.get('address')
        detailed_address = request.POST.get('detailed_address')
        postal_code = request.POST.get('postal_code')
        
        # اعتبارسنجی
        errors = []
        if not full_name:
            errors.append("نام و نام خانوادگی الزامی است")
        if not address:
            errors.append("آدرس پستی الزامی است")
        if not detailed_address:
            errors.append("آدرس دقیق الزامی است")
        if not postal_code:
            errors.append("کد پستی الزامی است")
        elif not postal_code.isdigit() or len(postal_code) != 10:
            errors.append("کد پستی باید دقیقاً ۱۰ رقم باشد")
        
        if errors:
            for error in errors:
                messages.error(request, error)
            return render(request, 'accounts/complete_profile.html')
        
        # ذخیره اطلاعات
        user = request.user
        user.full_name = full_name
        user.address = address
        user.detailed_address = detailed_address
        user.postal_code = postal_code
        user.is_profile_complete = True
        user.save()
        
        messages.success(request, "✅ اطلاعات شما با موفقیت ثبت شد")
        
        next_url = request.session.get('next_url', 'shop:home')
        return redirect(next_url)
    
    return render(request, 'accounts/complete_profile.html')


# ========== ارسال مجدد کد ==========
def resend_otp_view(request):
    """ارسال مجدد کد تایید"""
    if request.method == 'POST':
        try:
            data = json.loads(request.body)
            phone = data.get('phone')
        except:
            return JsonResponse({'success': False, 'message': 'داده‌های ارسال شده نامعتبر است'})
        
        if not phone:
            return JsonResponse({'success': False, 'message': 'شماره موبایل وارد نشده است'})
        
        # حذف کدهای قبلی
        OTPCode.objects.filter(phone=phone, is_used=False).update(is_used=True)
        
        # ساخت کد جدید
        code = str(random.randint(100000, 999999))
        otp = OTPCode.objects.create(
            phone=phone,
            code=code,
            expires_at=timezone.now() + timezone.timedelta(minutes=2)
        )
        
        # 📌 چاپ کد جدید در کنسول
        print("=" * 50)
        print(f"📱 ارسال مجدد کد برای: {phone}")
        print(f"🔑 کد جدید: {otp.code}")
        print("=" * 50)
        
        return JsonResponse({'success': True, 'message': 'کد جدید ارسال شد'})
    
    return JsonResponse({'success': False, 'message': 'درخواست نامعتبر'})

from django.contrib.auth import logout

def logout_view(request):
    """خروج از حساب کاربری و بازگشت به صفحه اصلی"""
    logout(request)
    messages.success(request, "✅ شما با موفقیت از حساب خود خارج شدید")
    return redirect('shop:home')  # یا هر صفحه دیگه‌ای که می‌خواهید