import copy
from accounts.models import PushAccountAutomation
from .change_secret import (
    ChangeSecretAutomationSerializer, ChangeSecretUpdateAssetSerializer,
    ChangeSecretUpdateNodeSerializer
)


class PushAccountAutomationSerializer(ChangeSecretAutomationSerializer):
    # dynamic_username = serializers.BooleanField(label=_('Dynamic username'), default=False)
    # triggers = TreeChoicesField(
    #     choice_cls=TriggerChoice, label=_('Triggers'),
    #     default=TriggerChoice.all(),
    # )
    # action = LabeledChoiceField(
    #     choices=PushAccountActionChoice.choices, label=_('Action'),
    #     default=PushAccountActionChoice.create_and_push
    # )

    class Meta(ChangeSecretAutomationSerializer.Meta):
        model = PushAccountAutomation
        fields = copy.copy(ChangeSecretAutomationSerializer.Meta.fields)
        fields.remove('recipients')

        # fields = ChangeSecretAutomationSerializer.Meta.fields + [
        #     'dynamic_username', 'triggers', 'action'
        # ]

    # def validate_username(self, value):
    #     if self.initial_data.get('dynamic_username'):
    #         value = '@USER'
    #     queryset = self.Meta.model.objects.filter(username=value)
    #     if self.instance:
    #         queryset = queryset.exclude(id=self.instance.id)
    #     if queryset.exists():
    #         raise serializers.ValidationError(_('Username already exists'))
    #     return value
    #
    # def validate_dynamic_username(self, value):
    #     if not value:
    #         return value
    #     queryset = self.Meta.model.objects.filter(username='@USER')
    #     if self.instance:
    #         queryset = queryset.exclude(id=self.instance.id)
    #     if queryset.exists():
    #         raise serializers.ValidationError(_('Dynamic username already exists'))
    #     return value
    #
    # def validate_triggers(self, value):
    #     # Now triggers readonly, set all
    #     return TriggerChoice.all()
    #
    # def get_field_names(self, declared_fields, info):
    #     fields = super().get_field_names(declared_fields, info)
    #     excludes = [
    #         'recipients', 'is_periodic', 'interval', 'crontab',
    #         'periodic_display', 'assets', 'nodes'
    #     ]
    #     fields = [f for f in fields if f not in excludes]
    #     fields[fields.index('accounts')] = 'username'
    #     return fields


class PushAccountUpdateAssetSerializer(ChangeSecretUpdateAssetSerializer):
    class Meta:
        model = PushAccountAutomation
        fields = ChangeSecretUpdateAssetSerializer.Meta.fields


class PushAccountUpdateNodeSerializer(ChangeSecretUpdateNodeSerializer):
    class Meta:
        model = PushAccountAutomation
        fields = ChangeSecretUpdateNodeSerializer.Meta.fields