from django.contrib.auth.models import User
from rest_framework import serializers
from api.models import *
from rest_framework_simplejwt.tokens import RefreshToken


# Create your serializers here.


class AuthenticationSerializer(serializers.ModelSerializer):
    token = serializers.SerializerMethodField(read_only=True)
    refreshToken = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = User
        fields = ['id', 'email', 'username', 'token', 'refreshToken']

    def get_token(self, instance):
        refresh = RefreshToken.for_user(instance)
        return str(refresh.access_token)

    def get_refreshToken(self, instance):
        refresh = RefreshToken.for_user(instance)
        return str(refresh)


class AdminLoginSerializer(serializers.Serializer):
    email = serializers.EmailField(required=True)
    password = serializers.CharField(style={'input_type': 'password'}, write_only=True, required=True)


class AdminForgotPasswordViewSerializer(serializers.Serializer):
    email = serializers.EmailField(required=True)


class AdminVerifyForgotPasswordOTPSerializer(serializers.Serializer):
    email = serializers.EmailField(required=True)
    otp = serializers.IntegerField(required=True)


class AdminSetNewPasswordSerializer(serializers.Serializer):
    email = serializers.EmailField(required=True)
    newPassword = serializers.CharField(style={'input_type': 'password'}, write_only=True, required=True)
    confirmPassword = serializers.CharField(style={'input_type': 'password'}, write_only=True, required=True)


class AdminLogoutSerializer(serializers.Serializer):
    refresh = serializers.CharField(required=True)


class CategoryGetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = '__all__'


class CategoryCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = '__all__'


class CategoryUpdateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = '__all__'


class CraptitudeGetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Craptitude
        fields = '__all__'


class CraptitudeCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Craptitude
        fields = '__all__'


class CraptitudeUpdateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Craptitude
        fields = ['id', 'diaperPrefix', 'dumpsterPrefix']
