# serializers.py

from rest_framework import serializers
from patient.models import Patient, PatientImage, MedicalRecord
from reservation.models import Reservation
from core.models import Service
from doctor.models import Doctor
from doctor.models import Technician

class PatientImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = PatientImage
        fields = ['id', 'image', 'description', 'image_type', 'created_at']

class MedicalRecordSerializer(serializers.ModelSerializer):
    class Meta:
        model = MedicalRecord
        fields = [
            'id', 'record_type', 'diagnosis_date', 'medications', 'description',
            'status', 'diabetes_type', 'blood_pressure', 'pregnancy_week', 'created_at'
        ]

class ReservationSerializer(serializers.ModelSerializer):
    service = serializers.StringRelatedField()
    doctor = serializers.StringRelatedField()
    technician = serializers.StringRelatedField()

    class Meta:
        model = Reservation
        fields = ['id', 'service', 'doctor', 'technician', 'reservation_date', 'status']

class PatientSerializer(serializers.ModelSerializer):
    images = serializers.SerializerMethodField()
    medical_records = MedicalRecordSerializer(many=True, read_only=True)
    reservations = serializers.SerializerMethodField()

    class Meta:
        model = Patient
        fields = [
            'id', 'first_name', 'last_name', 'gender', 'date_of_birth', 'phone_number',
            'address', 'profile_picture', 'biography', 'medical_history',
            'images', 'medical_records', 'reservations'
        ]

    def get_images(self, obj):
        images = PatientImage.objects.filter(reservation__patient=obj).distinct()
        return PatientImageSerializer(images, many=True).data

    def get_reservations(self, obj):
        reservations = Reservation.objects.filter(patient=obj).distinct()
        return ReservationSerializer(reservations, many=True).data
