from rest_framework import serializers
from .models import MobileMoneySettings

class MobileMoneySettingsSerializer(serializers.ModelSerializer):
    organization_name = serializers.SerializerMethodField()
    income_account_label = serializers.SerializerMethodField()

    class Meta:
        model = MobileMoneySettings
        fields = [
            'id',
            'organization',
            'organization_name',
            'setting_type',
            'charge_amount',
            'charge_type',
            'income_account',
            'income_account_label',
            'is_active',
            'updated_at',
            'created_by',
        ]
        read_only_fields = [
            'id', 'updated_at', 'created_by', 'organization_name', 'income_account_label',
            'organization'
        ]

    def get_organization_name(self, obj):
        return obj.organization.name if obj.organization else None

    def get_income_account_label(self, obj):
        if not obj.income_account:
            return None
        return f"{obj.income_account.account_code} - {obj.income_account.account_name}"

    def create(self, validated_data):
        request = self.context.get('request')
        if not request:
            raise serializers.ValidationError("No request context found")

        # Only assign created_by; organization comes from the view
        if 'created_by' not in validated_data:
            validated_data['created_by'] = request.user

        return super().create(validated_data)

    def update(self, instance, validated_data):
        validated_data.pop('organization', None)  # prevent changing org
        return super().update(instance, validated_data)
