from rest_framework import serializers

from .models import Account, Transaction


class AccountSerializer(serializers.ModelSerializer):
    balance = serializers.DecimalField(max_digits=18, decimal_places=2, read_only=True)

    class Meta:
        model = Account
        fields = (
            'id', 'name', 'type', 'opening_balance', 'balance',
            'description', 'is_active', 'created_at'
        )
        read_only_fields = ('id', 'balance', 'created_at')


class TransactionSerializer(serializers.ModelSerializer):
    account_name = serializers.CharField(source='account.name', read_only=True)
    created_by_name = serializers.CharField(source='created_by.username', read_only=True)

    class Meta:
        model = Transaction
        fields = (
            'id', 'account', 'account_name', 'transaction_type', 'amount',
            'description', 'transaction_date', 'created_by', 'created_by_name',
            'created_at'
        )
        read_only_fields = ('id', 'created_by', 'created_by_name', 'created_at')

    def validate_amount(self, value):
        if value <= 0:
            raise serializers.ValidationError('Amount must be greater than zero.')
        return value
