from rest_framework import serializers
from django.contrib.auth.models import Group

from authentication.models import ExtendedUser


class UserSerializer(serializers.ModelSerializer):
    permissions = serializers.SerializerMethodField()
    groups = serializers.SlugRelatedField(many=True, read_only=True, slug_field='name')

    class Meta:
        model = ExtendedUser
        fields = ('id', 'username', 'email', 'first_name', 'last_name', 'permissions', 'groups')
        read_only_fields = ('id', 'username', 'email', 'first_name', 'last_name', 'permissions', 'groups')

    def get_permissions(self, obj):
        return list(set(obj.get_permissions()))


class GroupSerializer(serializers.ModelSerializer):
    permissions = serializers.SerializerMethodField()
    members = serializers.SerializerMethodField()

    class Meta:
        model = Group
        fields = ('id', 'name', 'permissions', 'members')

    def get_permissions(self, obj):
        return ["*:" + p.codename for p in obj.permissions.all()]

    def get_members(self, obj):
        return [u.username for u in obj.user_set.all()]