from rest_framework import serializers
from apps.companies.models import Company
from django.contrib.auth import get_user_model
from apps.permissions.models import UserCompanyRole
from apps.userprofile.serializers import UserProfileSerializer
from apps.core.utils.generate_password_util import generate_secure_password
from apps.userprofile.models import UserProfile

User = get_user_model()


class CreateUserSerializer(serializers.ModelSerializer):
    profile = serializers.DictField()
    company_roles = serializers.ListField(
        child=serializers.DictField(), required=False
    )

    class Meta:
        model = User
        fields = [
            "email",
            "profile",
            "company_roles",
        ]

    def create(self, validated_data):
        profile_data = validated_data.pop("profile", {})
        company_roles = validated_data.pop("company_roles", [])

        generated_password = generate_secure_password(12)
        validated_data["password"] = generated_password

        user = User.objects.create_user(**validated_data)
        user._generated_password = generated_password

        UserProfile.objects.create(
            user=user,
            first_name=profile_data.get("first_name"),
            last_name=profile_data.get("last_name"),
            phone_number=profile_data.get("phone_number"),
            image=profile_data.get("image"),
        )

        for role in company_roles:
            UserCompanyRole.objects.create(
                user=user,
                company_id=role["company_id"],
                role_id=role["role_id"],
            )

        company_ids = {r["company_id"] for r in company_roles}
        companies = Company.objects.filter(id__in=company_ids)
        user.companies.set(companies)
        userRole = UserCompanyRole.objects.filter(user=user).first()
        user.active_company = userRole.company
        user.save()

        return user