

from rest_framework import serializers
from entry.models import Entry
from car.serializers import CarSerializer
from branch.serializers import BranchSerializer
from car.models import Car


class EntrySerializer(serializers.ModelSerializer):
    # write with car_id
    car_id = serializers.PrimaryKeyRelatedField(
        queryset=Car.objects.all(), source='car', write_only=True
    )
    # read nested car
    car = CarSerializer(read_only=True)
    # read nested branch
    branch = BranchSerializer(read_only=True)
    
    class Meta:
        model = Entry
        fields = [
            'id', 'battery_capacity', 'initial_soc', 'final_soc', 'energy',
            'date_created', 'completed', 'total_cost', 'created_by', 'payment_option','approval_status', 'duration',
            'car_id',      # write
            'car',         # read
            'branch',      # read
        ]
        read_only_fields = ['created_by', 'branch']
    
    def create(self, validated_data):
        validated_data['created_by'] = self.context['request'].user
        # Get the user's branch from their latest login session
        from account.models import LoginSession
        latest_session = LoginSession.objects.filter(
            user=self.context['request'].user
        ).order_by('-login_time').first()
        
        if latest_session and latest_session.branch:
            validated_data['branch'] = latest_session.branch
        
        return super().create(validated_data)
