from rest_framework import serializers

class TransactionSoftDeleteSerializer(serializers.Serializer):
    """
    Serializer for transaction soft delete requests.
    """
    reference_number = serializers.CharField(
        max_length=255,
        required=True,
        help_text="The reference number of the transaction to delete"
    )
    branch_id = serializers.IntegerField(
        required=False,
        help_text="The branch ID where the transaction was created"
    )
    reason = serializers.CharField(
        max_length=1000,
        required=False,
        allow_blank=True,
        help_text="Optional reason for the deletion"
    )
    
    def validate_reference_number(self, value):
        """
        Validate that the reference number is not empty and has a reasonable format.
        """
        if not value or not value.strip():
            raise serializers.ValidationError("Reference number cannot be empty")
        
        # Basic format validation - should contain at least one hyphen
        if '-' not in value:
            raise serializers.ValidationError("Invalid reference number format")
        
        return value.strip()

class TransactionInfoSerializer(serializers.Serializer):
    """
    Serializer for transaction information response.
    """
    reference_number = serializers.CharField()
    amount = serializers.FloatField()
    heading = serializers.CharField()
    payment_method = serializers.CharField()
    record_date = serializers.DateTimeField()
    added_by = serializers.CharField(allow_null=True)
    credit_account = serializers.CharField(allow_null=True)
    debit_account = serializers.CharField(allow_null=True)
    branch = serializers.CharField(allow_null=True)
    can_delete = serializers.BooleanField()
    transaction_type = serializers.CharField()