from typing import Dict, Any


class ExpenseItemSerializer:
    """Serializer for expense items"""

    @staticmethod
    def serialize(expense_item: ExpenseItem) -> Dict[str, Any]:
        """Serialize single expense item"""
        return {
            'id': expense_item.id,
            'date': expense_item.date.strftime('%Y-%m-%d'),
            'description': expense_item.description,
            'cost_dollar': float(expense_item.cost_dollar),
            'cost_dinar': float(expense_item.cost_dinar()) if expense_item.cost_dinar() else None,
            'currency_type': expense_item.currency_type,
            'expense_type': expense_item.expense_type,
            'doctor': {
                'id': expense_item.doctor.id,
                'name': f"{expense_item.doctor.first_name} {expense_item.doctor.last_name}"
            } if expense_item.doctor else None,
            'technician': {
                'id': expense_item.technician.id,
                'name': f"{expense_item.technician.first_name} {expense_item.technician.last_name}"
            } if expense_item.technician else None,
            'created_at': expense_item.created_at.isoformat(),
            'updated_at': expense_item.updated_at.isoformat(),
        }

    @staticmethod
    def serialize_list(expense_items) -> list:
        """Serialize list of expense items"""
        return [
            ExpenseItemSerializer.serialize(item)
            for item in expense_items
        ]