from rest_framework import serializers
from apps.users.models import User
from django.utils import timezone

class PasswordResetRequestSerializer(serializers.Serializer):
    email = serializers.EmailField()

    def validate_email(self, value):
        if not User.objects.filter(email=value).exists():
            raise serializers.ValidationError("User with this email does not exist.")
        return value

class PasswordResetConfirmSerializer(serializers.Serializer):
    email = serializers.EmailField() 
    otp = serializers.CharField(max_length=6)
    new_password = serializers.CharField(min_length=8, write_only=True)
    confirm_password = serializers.CharField(min_length=8, write_only=True)

    def validate(self, data):
        # 1. Password Match Check
        if data['new_password'] != data['confirm_password']:
            raise serializers.ValidationError({"confirm_password": "Passwords do not match."})
        
        # 2. User, OTP & Expiry Check
        try:
            user = User.objects.get(email=data['email'], otp=data['otp'])
            
            if user.otp_expires_at and user.otp_expires_at < timezone.now():
                raise serializers.ValidationError({"otp": "OTP has expired."})
            
            # User object-ti data dictionary-te save korchi jate view-te pawa jay
            data['user'] = user
        except User.DoesNotExist:
            raise serializers.ValidationError({"otp": "Invalid OTP or email."})
            
        return data