
from django.db.models import Sum

from rest_framework import serializers

from customer.api.serializers import CustomerListSerializer

from account.models import UserProfile
from iltshot.models import ShotOperation, Phone, PhotoCustomer, Exam, Serie


class ShotOperationSerializer(serializers.ModelSerializer):
    class Meta:
        model = ShotOperation
        fields = "__all__"
    
    def save(self):
        shotoperation = ShotOperation(
            shotoperation_name=self.validated_data['shotoperation_name'],
            shotoperation_type=self.validated_data['shotoperation_type'],
            shotoperation_debit=self.validated_data['shotoperation_debit'],
            customer=self.validated_data['customer'],
            phone=self.validated_data['phone'],
            customerprofile=self.validated_data['customerprofile']
        )        
        shotoperation.save()

        return shotoperation

class PhoneSerializer(serializers.ModelSerializer):
    pictures_count = serializers.SerializerMethodField(method_name='calculate_pictures_count')
    class Meta:
        model = Phone
        fields = ['phone_id', 'phone_name', 'phone_state', 'pictures_count']
    
    def calculate_pictures_count(self, instance):
        debit = ShotOperation.objects.filter(state='E').filter(phone__state='E').filter(phone__id=instance.id).filter(shotoperation_type='D').aggregate(total_debit=Sum('shotoperation_debit')) 
        if debit['total_debit'] is not None:
            return debit['total_debit']
        else:
            return 0

class PhotoCustomerSerializer(serializers.ModelSerializer):
    customer = CustomerListSerializer()
    class Meta:
        model = PhotoCustomer
        fields = ['id', 'customer']

class SerieSerializer(serializers.ModelSerializer):
    class Meta:
        model = Serie
        fields = ['serie_code', 'serie_name']


class ExamSerializer(serializers.ModelSerializer):
    series = SerieSerializer(read_only=True, many=True)
    class Meta:
        model = Exam
        fields = ['exam_code', 'exam_name', 'series']

