from datetime import datetime
from hrms.models.user import JRPUser
from masters.serializers.baseuser import BaseUserSerializer
from rest_framework import serializers

from prj_mgt.models.projects import Project, ProjectMember, ProjectModule, ProjectTask, ProjectTaskAttachment, TaskMessage
from receipt.models.receipt_masters import Mode,  ReceiptCategory, ReceiptCounter, ReceiptDetails
from django.utils import timezone
from django.db import transaction
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi

class ProjectSerializer(BaseUserSerializer):
     
    
    class Meta:
        model = Project
        exclude= ['created_by','updated_by','created_at','updated_at']
        
class ProjectMemberSerializer(BaseUserSerializer):
     
    
    class Meta:
        model = ProjectMember
        exclude= ['created_by','updated_by','created_at','updated_at']

class ProjectModuleSerializer(BaseUserSerializer):
     
    
    class Meta:
        model = ProjectModule
        exclude= ['created_by','updated_by','created_at','updated_at']
        
class ProjectTaskAttachmentSerializer(serializers.ModelSerializer):
    class Meta:
        model = ProjectTaskAttachment
        fields = ['file']  # Keep it minimal — file is required
class AssignedMemberSerializer(serializers.ModelSerializer):
    name = serializers.SerializerMethodField()

    class Meta:
        model = JRPUser
        fields = ['id', 'name']

    def get_name(self, obj):
        return obj.get_full_name()
    
class ProjectTaskRetriveSerializer(BaseUserSerializer):
     
    #attachments = ProjectTaskAttachmentSerializer(many=True, write_only=True, required=False)
    module_info = ProjectModuleSerializer(source='module',read_only=True)
    assigned_members = AssignedMemberSerializer(many=True)
    
    
    attachments = serializers.ListField(
        child=serializers.FileField(),
        write_only=True,
        required=False
    )
    
    class Meta:
        model = ProjectTask
        exclude= ['created_by','updated_by','created_at','updated_at']
class ProjectTaskSerializer(BaseUserSerializer):
     
    #attachments = ProjectTaskAttachmentSerializer(many=True, write_only=True, required=False)
    module_info = ProjectModuleSerializer(source='module',read_only=True)
    
    
    attachments = serializers.ListField(
        child=serializers.FileField(),
        write_only=True,
        required=False
    )
    
    class Meta:
        model = ProjectTask
        exclude= ['created_by','updated_by','created_at','updated_at']
    
     
    def create(self, validated_data):
        
        print('validated_data',validated_data)
        attachments = validated_data.pop('attachments', [])
        assigned_members = validated_data.pop('assigned_members', [])
        task = ProjectTask.objects.create(**validated_data)
        task.assigned_members.set(assigned_members)

        for file in attachments:
            ProjectTaskAttachment.objects.create(task=task, file=file)
        return task    
        # attachments_data = validated_data.pop('attachments', [])
        # task = ProjectTask.objects.create(**validated_data)
        # for attachment_data in attachments_data:
        #     ProjectTaskAttachment.objects.create(task=task, **attachment_data)
        # return task
        

        
class TaskMessageSerializer(BaseUserSerializer):
     
    
    class Meta:
        model = TaskMessage
        exclude= ['created_by','updated_by','created_at','updated_at']