from rest_framework import serializers
from .models import *
from admin_panel.models import ContentManagement, Faq, OnBoardingData, AdminExercise, AdminSubExercise,FitnessLevel,DiscoverMainCategory, DiscoverSubCategory, DiscoverExercise


class AppUserSerializer(serializers.ModelSerializer):
	focus_area = serializers.SerializerMethodField()
	main_goal = serializers.SerializerMethodField()
	medical_condition = serializers.SerializerMethodField()
	allergies_exclusions = serializers.SerializerMethodField()
	
	class Meta:
		model = AppUser
		fields = ['full_name', 'email', 'email_verified', 'phone_number', 'gender', 'age', 'current_weight','address','latitude','longitude',
			'target_weight', 'weight_unit', 'current_height', 'height_unit', 'focus_area', 'main_goal', 'current_body_shape',
			'fitness_level', 'medical_condition', 'allergies_exclusions', 'image', 'is_profile_completed',]
	

	def get_focus_area(self, obj):
		focus_area_string = obj.focus_area
		if focus_area_string:
			focus_area = focus_area_string.strip("[]").replace("'", "").split(", ")
		else:
			focus_area = []
		return focus_area

	def get_main_goal(self, obj):
		main_goal_string = obj.main_goal
		if main_goal_string:
			main_goal = main_goal_string.strip("[]").replace("'", "").split(", ")
		else:
			main_goal = []
		return main_goal

	def get_medical_condition(self, obj):
		medical_condition_string = obj.medical_condition
		if medical_condition_string:
			medical_condition = medical_condition_string.strip("[]").replace("'", "").split(", ")
		else:
			medical_condition = []
		return medical_condition
	
	def get_allergies_exclusions(self, obj):
		allergies_exclusions_string = obj.allergies_exclusions
		if allergies_exclusions_string:
			allergies_exclusions = allergies_exclusions_string.strip("[]").replace("'", "").split(", ")
		else:
			allergies_exclusions = []
		return allergies_exclusions


class ContentSerializer(serializers.ModelSerializer):
	class Meta:
		model = ContentManagement
		fields = ['id', 'text', 'user_type']
	
class FAQSerializer(serializers.ModelSerializer):
	class Meta:
		model = Faq
		fields = '__all__'
		
class OnBoardingSerializer(serializers.ModelSerializer):
	class Meta:
		model = OnBoardingData
		fields = '__all__'


class AdminExerciseSerializer(serializers.ModelSerializer):
	class Meta:
		model = AdminExercise
		fields = ('id', 'name', 'description', 'image','day')


class ExerciseLevelSerializer(serializers.ModelSerializer):
	exercise=serializers.SerializerMethodField(source='get_exercise')
	class Meta:
		model=FitnessLevel
		fields=['id','name','image','exercise']

	def get_exercise(self,obj):
		fitness_level_obj=AdminExercise.objects.filter(exercise_level=obj)
		return AdminExerciseSerializer(fitness_level_obj,many=True).data


class AdminSubExerciseSerializer(serializers.ModelSerializer):
	images = serializers.SerializerMethodField()
	videos = serializers.SerializerMethodField()
	focus_area = serializers.SerializerMethodField()
	class Meta:
		model = AdminSubExercise
		fields = ('id', 'name', 'description', 'comments', 'note', 'focus_area', 'sets', 'reps', 'youtube_link', 'videos','images','video_link')

	
	def get_images(self, obj):
		images_string = obj.images
		if images_string:
			images_array = images_string.strip("[]").replace("'", "").split(", ")
		else:
			images_array = []
		return images_array

	def get_videos(self, obj):
		videos_string = obj.videos
		if videos_string:
			videos_array = videos_string.strip("[]").replace("'", "").split(", ")
		else:
			videos_array = []
		return videos_array
	
	def get_focus_area(self, obj):
		focus_area_string = obj.focus_area
		if focus_area_string:
			focus_area = focus_area_string.strip("[]").replace("'", "").split(", ")
		else:
			focus_area = []
		return focus_area
	



class AppUserFriendSerializer(serializers.ModelSerializer):
	print('hehsdfhsd')
	friend_status = serializers.SerializerMethodField(source='get_friend_status')
	class Meta:
		model = AppUser
		fields = ['id', 'full_name','image','gender','age','friend_status']
	
	def get_friend_status(self,obj):
		login_user = self.context.get('login_user')
		# friend_status = FriendRequest.objects.filter(
		# (models.Q(from_user=login_user, to_user=obj) | models.Q(from_user=obj, to_user=login_user)),
		# accepted=True
		# ).exists()
		friend_status = Friends.objects.filter(
		(models.Q(from_user=login_user, to_user=obj) | models.Q(from_user=obj, to_user=login_user))
		)
		if not friend_status:
			friend_status = None
		else:
			for friends in friend_status:
				if friends.accepted==True:
					friend_status = 'friends'
				elif friends.accepted == False:
					friend_status = 'requested'
		return friend_status


class SentUserFriendListSerializer(serializers.ModelSerializer):
	to_user = AppUserFriendSerializer()

	class Meta:
		model = Friends
		fields = ['id', 'to_user', 'accepted']


	
class ReceivedUserFriendListSerializer(serializers.ModelSerializer):
	print('243242343')
	from_user = AppUserFriendSerializer()

	class Meta:
		model = Friends
		fields = ['id', 'from_user', 'accepted']


class ExerciseSerializer(serializers.ModelSerializer):
	class Meta:
		model = DiscoverExercise
		fields = '__all__'

class SubCategorySerializer(serializers.ModelSerializer):
	exercises = ExerciseSerializer(many=True, read_only=True)
	
	class Meta:
		model = DiscoverSubCategory
		fields = '__all__'
	def to_representation(self, instance):
		data = super(SubCategorySerializer, self).to_representation(instance)
		print(data)
		if data['end_date']==None:
			return data
			


class MainCategorySerializer(serializers.ModelSerializer):
	sub_categories = SubCategorySerializer(many=True, read_only=True, source='discoversubcategory_set')
	class Meta:
		model = DiscoverMainCategory
		fields = [ 'id','name', 'start_date','end_date','sub_categories']
	def to_representation(self, instance):
		data = super(MainCategorySerializer, self).to_representation(instance)
		# Filter out any null objects from the sub_categories list
		data['sub_categories'] = [sub for sub in data['sub_categories'] if sub is not None]
		return data

class GetSubCategoryExercisesSerializer(serializers.ModelSerializer):
	exercises = ExerciseSerializer(many=True, read_only=True,source='discoverexercise_set')

	class Meta:
		model = DiscoverSubCategory
		fields = [ 'id','title', 'description','image','start_date','main_category','exercises']