# *coding: utf-8*

from backoffice.models import *
from rest_framework import serializers
from rest_framework.pagination import PageNumberPagination
from datetime import datetime, timedelta

class NoPaginationResults(PageNumberPagination):
    page_size = 1000
    page_size_query_param = 'page_size'
    max_page_size = 1000

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        exclude = ('createdAt',)

class TownSerializer(serializers.ModelSerializer):
    class Meta:
        model = Town
        exclude = ('createdAt',)

class UserSerializer(serializers.ModelSerializer):
    mainPhoto = serializers.SerializerMethodField()
    class Meta:
        model = User
        #fields = '__all__'
        exclude = ('photos',)

    def get_mainPhoto(self, obj):
        if "http" in obj.mainPhoto.name:
            return obj.mainPhoto.name
        else:
            return 'https://www.agender.fr/storage/'+obj.mainPhoto.name

class UserWithPhotoSerializer(serializers.ModelSerializer):
    mainPhoto = serializers.SerializerMethodField()
    class Meta:
        model = User
        fields = '__all__'

    def get_mainPhoto(self, obj):
        if "http" in obj.mainPhoto.name:
            return obj.mainPhoto.name
        else:
            return 'https://www.agender.fr/storage/'+obj.mainPhoto.name
class PhotoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Photo
        fields = '__all__'

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = '__all__'

class PhotoProfileSerializer(serializers.ModelSerializer):
    refPhoto = PhotoSerializer(read_only=True)
    class Meta:
        model = PhotoProfile
        fields = '__all__'

class CreatePhotoProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = PhotoProfile
        fields = '__all__'

class PlaceSerializer(serializers.ModelSerializer):
    mainPhoto = serializers.SerializerMethodField()
    townName = serializers.SerializerMethodField()
    class Meta:
        model = Place
        fields = '__all__'

    def get_townName(self, obj):
        return obj.refTown.city


    def get_mainPhoto(self, obj):
        if "http" in obj.mainPhoto.name:
            return obj.mainPhoto.name
        else:
            return 'https://www.agender.fr/storage/'+obj.mainPhoto.name

class EventSerializer(serializers.ModelSerializer):
    #picture = serializers.ImageField(max_length=None, use_url=False)
    picture = serializers.SerializerMethodField()

    class Meta:
        model = Event
        exclude = ('photos','startDateEvent','endDateEvent',)

    def get_picture(self, obj):
        if "http" in obj.picture.name:
            return obj.picture.name
        else:
            return 'https://www.agender.fr/storage/'+obj.picture.name

class PlacesCommentsSerializer(serializers.ModelSerializer):
    refUser = UserSerializer(read_only=True)

    class Meta:
        model = PlacesComments
        fields = '__all__'

class PlacesUsersSerializer(serializers.ModelSerializer):
    refUser = UserSerializer(read_only=True)

    class Meta:
        model = PlacesUsers
        fields = '__all__'

class PlacesUsersForCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = PlacesUsers
        fields = '__all__'

class PlacesCommentsForCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = PlacesComments
        fields = '__all__'

class PlacesVoteSerializer(serializers.ModelSerializer):
    class Meta:
        model = PlacesVote
        fields = '__all__'

class EventCommentsSerializer(serializers.ModelSerializer):
    refUser = UserSerializer(read_only=True)

    class Meta:
        model = EventComments
        fields = '__all__'

class EventUsersSerializer(serializers.ModelSerializer):
    refUser = UserSerializer(read_only=True)

    class Meta:
        model = EventUsers
        fields = '__all__'


class EventUsersForCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = EventUsers
        fields = '__all__'

class EventCommentsForCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = EventComments
        fields = '__all__'

class EventCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = EventCategory
        fields = '__all__'

class ChatSerializer(serializers.ModelSerializer):
    #refUserOne = UserSerializer(read_only=True)
    #refUserTwo = UserSerializer(read_only=True)


    class Meta:
        model = Chat
        fields = '__all__'

class ChatFullDetailSerializer(serializers.ModelSerializer):
    refUserOne = UserSerializer(read_only=True)
    refUserTwo = UserSerializer(read_only=True)

    class Meta:
        model = Chat
        fields = '__all__'

class CreateChatSerializer(serializers.ModelSerializer):
    class Meta:
        model = Chat
        fields = '__all__'



class ChatMessageSerializer(serializers.ModelSerializer):
   # refChat = ChatSerializer(read_only=True)
    #senderId = UserSerializer(read_only=True)
    #chat = ChatSerializer(read_only=True)
    @staticmethod
    def setup_eager_loading(queryset):
        """ Perform necessary eager loading of data. """
        queryset = queryset.select_related('refChat')
        queryset = queryset.select_related('senderId')
        return queryset
    class Meta:
        model = ChatMessage
        fields = '__all__'

class CreateChatMessageSerializer(serializers.ModelSerializer):
    class Meta:
        model = ChatMessage
        fields = '__all__'


class PostSerializer(serializers.ModelSerializer):
    refUser = UserSerializer(read_only=True)
    class Meta:
        model = Post
        fields = '__all__'

class PostCommentsSerializer(serializers.ModelSerializer):
    refUser = UserSerializer(read_only=True)

    class Meta:
        model = PostComments
        fields = '__all__'

class PostCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

class PostCommentsCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostComments
        fields = '__all__'


class UserLikeSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserLike
        fields = '__all__'


class FollowSerializer(serializers.ModelSerializer):
    class Meta:
        model = Follow
        fields = '__all__'

class FollowInfosSerializer(serializers.ModelSerializer):
    following = UserSerializer(read_only=True)
    class Meta:
        model = Follow
        fields = '__all__'
