from rest_framework import serializers

from apps.investors.models import Investor, InvestorApplication, InvestorType


class InvestorApplicationSerializer(serializers.ModelSerializer):
    class Meta:
        model = InvestorApplication
        fields = (
            "id",
            "investor_type",
            "status",
            "full_name",
            "country",
            "nationality",
            "passport_id",
            "email",
            "mobile",
            "address",
            "investment_interest",
            "preferred_project_slug",
            "investment_range",
            "company_name",
            "registration_number",
            "authorized_person",
            "business_info",
            "investment_capacity",
            "created_at",
        )
        read_only_fields = ("id", "status", "created_at")

    def validate(self, attrs):
        investor_type = attrs.get("investor_type")
        if investor_type == InvestorType.INDIVIDUAL:
            required = ["full_name", "country", "nationality", "passport_id", "email", "mobile", "address"]
            missing = [field for field in required if not attrs.get(field)]
            if missing:
                raise serializers.ValidationError({field: "This field is required." for field in missing})
        elif investor_type == InvestorType.CORPORATE:
            required = ["company_name", "registration_number", "country", "authorized_person", "email"]
            missing = [field for field in required if not attrs.get(field)]
            if missing:
                raise serializers.ValidationError({field: "This field is required." for field in missing})
        return attrs


class InvestorSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(source="user.email", read_only=True)
    full_name = serializers.CharField(source="user.full_name", read_only=True)
    phone = serializers.CharField(source="user.phone", read_only=True)
    two_factor_enabled = serializers.BooleanField(source="user.two_factor_enabled", read_only=True)
    is_email_verified = serializers.BooleanField(source="user.is_email_verified", read_only=True)

    class Meta:
        model = Investor
        fields = (
            "id",
            "account_code",
            "investor_type",
            "status",
            "kyc_status",
            "email",
            "full_name",
            "phone",
            "country",
            "nationality",
            "passport_id_last4",
            "address",
            "company_name",
            "registration_number",
            "two_factor_enabled",
            "is_email_verified",
            "created_at",
        )


class BeneficiaryPublicSerializer(serializers.Serializer):
    public_label = serializers.CharField()
    category = serializers.CharField()
    project_name = serializers.CharField()
    benefit_type = serializers.CharField()
    status = serializers.CharField()
