from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from api.models.user import User
from rest_framework import serializers

class BaseSerializer(serializers.Serializer):
    password = serializers.CharField(write_only=True, min_length=6)
    name = serializers.CharField()
    email = serializers.EmailField()

    class Meta:
        model = User
        fields = ['name', 'email', 'password']

    def create(self, validated_data):
        user = User.objects.create_user(
            name=validated_data['name'],
            email=validated_data['email'],
            password=validated_data['password'],
            user_type=User.USER_TYPE.get("admin"),
            status=User.STATUS_TO_CODE.get("active"),
        )
        return user

class Register(APIView):
    def post(self, request):
        serializer = BaseSerializer(data=request.data)
        if serializer.is_valid():
            user = serializer.save()
            return Response({"message": "Admin registered", "id": user.id}, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)