from apps.master import models as master_model
from base.serializers import DynamicFieldsModelSerializer
from rest_framework import serializers

class AmenitiesMasterSerializers(DynamicFieldsModelSerializer):
    """
    This is the LocationsCSVUploadSerializers class responsible for serializing and deserializing location data.

    It allows users to manage the upload of location data from a CSV file and the creation or update of location records.

    Meta:
        model (LocationMaster): The model used for serialization and deserialization.
        fields (str): The fields to include in the serialization (all fields are included).
    """

    class Meta:
        model = master_model.AmenitiesMaster
        fields = ["id", "name"]


class ConnectorMasterSerializers(DynamicFieldsModelSerializer):
    """
    This is the ConnectorMasterSerializers class responsible for serializing and deserializing connector data.

    It enables users to manage the serialization and deserialization of connector data,
    allowing for efficient processing of data related to connectors.

    Meta:
        model (ConnectorMaster): The model used for serialization and deserialization.
        fields (str): The fields to include in the serialization, with all relevant fields included.

    Usage Example:
    - This serializer is typically used for converting connector data to a format suitable for
    transmission or storage and vice versa.
    """

    image = serializers.FileField(use_url=True)

    class Meta:
        model = master_model.ConnectorMaster
        fields = ["id", "name", "short_name", "image"]


class LocationMasterSerializers(DynamicFieldsModelSerializer):
    """
    This is the ConnectorMasterSerializers class responsible for serializing and deserializing connector data.

    It enables users to manage the serialization and deserialization of connector data,
    allowing for efficient processing of data related to connectors.

    Meta:
        model (ConnectorMaster): The model used for serialization and deserialization.
        fields (str): The fields to include in the serialization, with all relevant fields included.

    Usage Example:
    - This serializer is typically used for converting connector data to a format suitable for
    transmission or storage and vice versa.
    """

    class Meta:
        model = master_model.LocationMaster
        fields = ["id", "name"]


class NetworkOperatorMasterSerializers(DynamicFieldsModelSerializer):
    """
    This is the NetworkOperatorMasterSerializers class responsible for serializing and deserializing
     network operator data.

    It enables users to manage the serialization and deserialization of network operator data,
    allowing for efficient processing of data related to network operators.

    Attributes:
        class Meta: Specifies the model used for serialization and the fields to include in the serialization.

    Meta:
        model (NetworkOperatorMaster): The model used for serialization and deserialization.
        fields (str): The fields to include in the serialization, with all relevant fields included.
    """

    class Meta:
        model = master_model.NetworkOperatorMaster
        fields = ["id", "name", "logo", "url", "phone"]


class RatingLabelsSerializers(DynamicFieldsModelSerializer):
    """
    Serializer for rating labels data.

    Fields:
        - id (int): Unique identifier for the rating label.
        - label (str): Name of the rating label.
    """

    class Meta:
        model = master_model.RatingLabelMaster
        fields = ("id", "label")
        read_only_fields = ["id"]


class RatingLabelsAssetSerializers(DynamicFieldsModelSerializer):
    """
    Serializer for rating labels assets data.

    Fields:
        - rating (float): Rating associated with the asset.
        - title (str): Title or name of the asset.
        - labels (RatingLabelsSerializer, optional): Rating labels associated with the asset.
        - asset (str): URL or reference to the asset.
    """

    labels_data = RatingLabelsSerializers(
        source="labels", fields=["id", "label"], many=True, read_only=True
    )

    class Meta:
        model = master_model.RatingLabelsAsset
        fields = ["id", "rating", "title", "labels", "labels_data", "asset"]
        read_only_fields = ["id"]
        extra_kwargs = {
            "labels": {"write_only": True},
        }


class PrivacyPolicySerializers(DynamicFieldsModelSerializer):
    """
    Serializer for PrivacyPolicy data.

    Fields:
        - content (str): content for PrivacyPolicy.
    """

    class Meta:
        model = master_model.PrivacyPolicyMaster
        fields = ["id", "content"]
        read_only_fields = ["id"]


class TermsOfUseSerializers(DynamicFieldsModelSerializer):
    """
    Serializer for TermsOfUse data.

    Fields:
        - content (str): content for TermsOfUse.
    """

    class Meta:
        model = master_model.TermsOfUseMaster
        fields = ["id", "content"]
        read_only_fields = ["id"]


class FaqSerializers(DynamicFieldsModelSerializer):
    """
    Serializer for faq data.

    Fields:
        - id (int): Unique identifier for the rating label.
        - title (str): Title of the faq.
        - content (str): Content of the faq.
    """

    class Meta:
        model = master_model.FaqMaster
        fields = ("id", "title", "content")
        read_only_fields = ["id"]


class ContactUsRequestTypeSerializers(DynamicFieldsModelSerializer):
    """
    Serializer class for serializing and deserializing ContactUsRequestTypeMaster instances.

    This serializer class includes fields for 'id' and 'name'.
    'id' is marked as read-only.

    Attributes:
        Meta.model: The model class to which this serializer applies.
        Meta.fields: The fields to include in the serialized representation.
        Meta.read_only_fields: The fields that should be treated as read-only during updates.
    """

    class Meta:
        model = master_model.ContactUsRequestTypeMaster
        fields = ("id", "name")
        read_only_fields = ["id"]
