"""

This module contains classes intended to parse and deal with data from Foxford client information endpoints.

"""

from .bases.baseuser import BaseUser

class User(BaseUser):
    """
    Represents a single conversation.
    Attributes generated by FrostX's request-to-base

    Attributes:
        id: The id of user
        email: The email of user
        first_name: The first_name of user
        middle_name: The middle_name of user
        last_name: The last_name of user
        full_name: The full_name of user
        short_name: The short_name of user
        grade_checked: The grade_checked of user
        phone: The phone of user
        timezone: The timezone of user
        locale: The locale of user
        is_parent: The is_parent of user
        fake_user: The fake_user of user
        is_customer: The is_customer of user
        email_confirmed: The email_confirmed of user
        fake_email: The fake_email of user
        phone_confirmed: The phone_confirmed of user
        created_at: The created_at of user
        recent_registration: The recent_registration of user
        profile_enriched: The profile_enriched of user
        avatar_changes_gap_in_days: The avatar_changes_gap_in_days of user
        personal_data_changes_gap_in_days: The personal_data_changes_gap_in_days of user
        skype: The skype of user
        school_entry_year: The school_entry_year of user
        attestation_format_id: The attestation_format_id of user
        education_form_id: The education_form_id of user
        avatar_can_be_changed_at: The avatar_can_be_changed_at of user
        personal_data_can_be_changed_at: The personal_data_can_be_changed_at of user
        about: The about of user
        can_change_school_info: The can_change_school_info of user
        privacy: The privacy of user
        parent_phone: The parent_phone of user
        parent_phone_confirmed: The parent_phone_confirmed of user
        is_graduated: The is_graduated of user
        type: The type of user
        avatar_url: The avatar_url of user
        bonus_amount: The bonus_amount of user
        free_access_finishes_at: The free_access_finishes_at of user
        grade: The grade of user
        social_nets: The social_nets of user
        tags: The tags of user
        onboarding_finished: The onboarding_finished of user
        onboarding_finished_at: The onboarding_finished_at of user
        has_bookmarks: The has_bookmarks of user
        externship_user: The externship_user of user
        is_elementary_pupil: The is_elementary_pupil of user
        has_active_purchases: The has_active_purchases of user
        discipline_ids: The discipline_ids of user
        has_access_to_multi_days_streaks: The has_access_to_multi_days_streaks of user
        cart_items_count: The cart_items_count of user
        cart_template_id: The cart_template_id of user
        web_socket_notifications_jwt: The web_socket_notifications_jwt of user
        has_children: The has_children of user
        purchase_any_externship_contracts: The purchase_any_externship_contracts of user
        has_purchased_externship_contracts: The has_purchased_externship_contracts of user
        has_externship_attestation_access: The has_externship_attestation_access of user
        can_prolongate_contract: The can_prolongate_contract of user
        externship_payment_required: The externship_payment_required of user
        is_base_product_activated: The is_base_product_activated of user
        bonuses_page_visited: The bonuses_page_visited of user
        city: The city of user
        hobby_ids: The hobby_ids of user
        social_links: The social_links of user
        socialization_profile: The socialization_profile of user

    """

    def __init__(self, data: dict):
        """
        Arguments:
            data: The data from the request.
        """
        super().__init__(user_id=data["id"])

        self._data: dict = data

        self.id: int = data["id"]
        self.email: str = data["email"]
        self.first_name: str = data["first_name"]
        self.middle_name: None = data["middle_name"]
        self.last_name: str = data["last_name"]
        self.full_name: str = data["full_name"]
        self.short_name: str = data["short_name"]
        self.grade_checked: bool = data["grade_checked"]
        self.phone: None = data["phone"]
        self.timezone: str = data["timezone"]
        self.locale: str = data["locale"]
        self.is_parent: bool = data["is_parent"]
        self.fake_user: bool = data["fake_user"]
        self.is_customer: bool = data["is_customer"]
        self.email_confirmed: bool = data["email_confirmed"]
        self.fake_email: bool = data["fake_email"]
        self.phone_confirmed: bool = data["phone_confirmed"]
        self.created_at: str = data["created_at"]
        self.recent_registration: bool = data["recent_registration"]
        self.profile_enriched: bool = data["profile_enriched"]
        self.avatar_changes_gap_in_days: int = data["avatar_changes_gap_in_days"]
        self.personal_data_changes_gap_in_days: int = data["personal_data_changes_gap_in_days"]
        self.skype: str = data["skype"]
        self.school_entry_year: None = data["school_entry_year"]
        self.attestation_format_id: int = data["attestation_format_id"]
        self.education_form_id: int = data["education_form_id"]
        self.avatar_can_be_changed_at: str = data["avatar_can_be_changed_at"]
        self.personal_data_can_be_changed_at: str = data["personal_data_can_be_changed_at"]
        self.about: None = data["about"]
        self.can_change_school_info: bool = data["can_change_school_info"]
        self.privacy: dict = data["privacy"]
        self.parent_phone: str = data["parent_phone"]
        self.parent_phone_confirmed: bool = data["parent_phone_confirmed"]
        self.is_graduated: bool = data["is_graduated"]
        self.type: str = data["type"]
        self.avatar_url: str = data["avatar_url"]
        self.bonus_amount: int = data["bonus_amount"]
        self.free_access_finishes_at: None = data["free_access_finishes_at"]
        self.grade: dict = data["grade"]
        self.social_nets: list = data["social_nets"]
        self.tags: list = data["tags"]
        self.onboarding_finished: bool = data["onboarding_finished"]
        self.onboarding_finished_at: None = data["onboarding_finished_at"]
        self.has_bookmarks: bool = data["has_bookmarks"]
        self.externship_client: bool = data["externship_client"]
        self.is_elementary_pupil: bool = data["is_elementary_pupil"]
        self.has_active_purchases: bool = data["has_active_purchases"]
        self.discipline_ids: list = data["discipline_ids"]
        self.has_access_to_multi_days_streaks: bool = data["has_access_to_multi_days_streaks"]
        self.cart_items_count: int = data["cart_items_count"]
        self.cart_template_id: None = data["cart_template_id"]
        self.web_socket_notifications_jwt: str = data["web_socket_notifications_jwt"]
        self.has_children: bool = data["has_children"]
        self.purchase_any_externship_contracts: bool = data["purchase_any_externship_contracts"]
        self.has_purchased_externship_contracts: bool = data["has_purchased_externship_contracts"]
        self.has_externship_attestation_access: bool = data["has_externship_attestation_access"]
        self.can_prolongate_contract: bool = data["can_prolongate_contract"]
        self.externship_payment_required: dict = data["externship_payment_required"]
        self.is_base_product_activated: bool = data["is_base_product_activated"]
        self.bonuses_page_visited: bool = data["bonuses_page_visited"]
        self.city: dict = data["city"]
        self.hobby_ids: list = data["hobby_ids"]
        self.social_links: list = data["social_links"]
        self.socialization_profile: dict = data["socialization_profile"]

    def __repr__(self):
        return f"<{self.__class__.__name__} id={self.id} full_name={self.full_name!r}>"
