# -*- mode: python; coding: utf-8 -*-
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
# Copyright © 2018 Maël Kervella
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

from rest_framework import serializers

import preferences.models as preferences
from api.serializers import NamespacedHRField, NamespacedHIField, NamespacedHMSerializer

class OptionalUserSerializer(NamespacedHMSerializer):
    """Serialize `preferences.models.OptionalUser` objects.
    """

    tel_mandatory = serializers.BooleanField(source="is_tel_mandatory")
    shell_default = serializers.StringRelatedField()

    class Meta:
        model = preferences.OptionalUser
        fields = (
            "tel_mandatory",
            "gpg_fingerprint",
            "all_can_create_club",
            "self_adhesion",
            "shell_default",
            "self_change_shell",
            "local_email_accounts_enabled",
            "local_email_domain",
            "max_email_address",
        )


class OptionalMachineSerializer(NamespacedHMSerializer):
    """Serialize `preferences.models.OptionalMachine` objects.
    """

    class Meta:
        model = preferences.OptionalMachine
        fields = (
            "password_machine",
            "max_lambdauser_interfaces",
            "max_lambdauser_aliases",
            "ipv6_mode",
            "create_machine",
            "ipv6",
            "default_dns_ttl"
        )


class OptionalTopologieSerializer(NamespacedHMSerializer):
    """Serialize `preferences.models.OptionalTopologie` objects.
    """

    switchs_management_interface_ip = serializers.CharField()

    class Meta:
        model = preferences.OptionalTopologie
        fields = (
            "switchs_ip_type",
            "switchs_web_management",
            "switchs_web_management_ssl",
            "switchs_rest_management",
            "switchs_management_utils",
            "switchs_management_interface_ip",
            "provision_switchs_enabled",
            "switchs_provision",
            "switchs_management_sftp_creds",
        )


class RadiusOptionSerializer(NamespacedHMSerializer):
    """Serialize `preferences.models.RadiusOption` objects
    """

    class Meta:
        model = preferences.RadiusOption
        fields = (
            "radius_general_policy",
            "unknown_machine",
            "unknown_machine_vlan",
            "unknown_port",
            "unknown_port_vlan",
            "unknown_room",
            "unknown_room_vlan",
            "non_member",
            "non_member_vlan",
            "banned",
            "banned_vlan",
            "vlan_decision_ok",
        )


class GeneralOptionSerializer(NamespacedHMSerializer):
    """Serialize `preferences.models.GeneralOption` objects.
    """

    class Meta:
        model = preferences.GeneralOption
        fields = (
            "general_message_fr",
            "general_message_en",
            "search_display_page",
            "pagination_number",
            "pagination_large_number",
            "req_expire_hrs",
            "site_name",
            "main_site_url",
            "email_from",
            "GTU_sum_up",
            "GTU",
        )


class HomeServiceSerializer(NamespacedHMSerializer):
    """Serialize `preferences.models.Service` objects.
    """

    class Meta:
        model = preferences.Service
        fields = ("name", "url", "description", "image", "api_url")
        extra_kwargs = {"api_url": {"view_name": "homeservice-detail"}}


class AssoOptionSerializer(NamespacedHMSerializer):
    """Serialize `preferences.models.AssoOption` objects.
    """

    class Meta:
        model = preferences.AssoOption
        fields = (
            "name",
            "siret",
            "adresse1",
            "adresse2",
            "contact",
            "telephone",
            "profile_image",
            "pseudo",
            "utilisateur_asso",
            "description",
        )


class HomeOptionSerializer(NamespacedHMSerializer):
    """Serialize `preferences.models.HomeOption` objects.
    """

    class Meta:
        model = preferences.HomeOption
        fields = ("facebook_url", "twitter_url", "twitter_account_name")


class MailMessageOptionSerializer(NamespacedHMSerializer):
    """Serialize `preferences.models.MailMessageOption` objects.
    """

    class Meta:
        model = preferences.MailMessageOption
        fields = ("welcome_mail_fr", "welcome_mail_en")