from rest_framework import serializers
from apps.accounts.models import User
from .models import Occupation

class GoogleLoginSerializer(serializers.Serializer):
    email = serializers.EmailField()
    name = serializers.CharField()

class CompleteProfileSerializer(serializers.Serializer):
    user_id = serializers.CharField()
    sponsor_id = serializers.CharField()
    full_name = serializers.CharField()
    mobile = serializers.CharField()
    email = serializers.EmailField()
    pan_number = serializers.CharField()
    date_of_birth = serializers.DateField()
    pincode = serializers.CharField()
    location_input = serializers.CharField(required=False, allow_blank=True)
    occupation = serializers.PrimaryKeyRelatedField(queryset=Occupation.objects.filter(is_active=True), required=True)
    accept_terms = serializers.BooleanField()

    def validate_mobile(self, value):
        value = value.strip()
        if User.objects.filter(mobile=value).exists():
            raise serializers.ValidationError('Mobile already exists')
        return value

    def validate_email(self, value):
        value = value.strip()
        if User.objects.filter(email=value).exists():
            raise serializers.ValidationError('Email already exists')
        return value

    def validate_pan_number(self, value):
        value = value.upper().strip()
        if User.objects.filter(pan_number=value).exists():
            raise serializers.ValidationError('PAN already exists')
        return value

    def validate_accept_terms(self, value):
        if not value:
            raise serializers.ValidationError('Terms must be accepted')
        return value

    def validate_sponsor_id(self, value):
        if not User.objects.filter(referral_code=value).exists():
            raise serializers.ValidationError('Invalid sponsor referral_code')
        return value
