from dataclasses import dataclass
from typing import Literal, Optional
from models.base import BaseModel


PendingEntityType = Literal['chore', 'reward']
PendingStatus = Literal['pending', 'approved', 'rejected']


@dataclass
class PendingConfirmation(BaseModel):
    child_id: str
    entity_id: str
    entity_type: PendingEntityType
    user_id: str
    status: PendingStatus = "pending"
    approved_at: Optional[str] = None  # ISO 8601 UTC timestamp, set on approval

    @classmethod
    def from_dict(cls, d: dict):
        return cls(
            child_id=d.get('child_id'),
            entity_id=d.get('entity_id'),
            entity_type=d.get('entity_type'),
            user_id=d.get('user_id'),
            status=d.get('status', 'pending'),
            approved_at=d.get('approved_at'),
            id=d.get('id'),
            created_at=d.get('created_at'),
            updated_at=d.get('updated_at')
        )

    def to_dict(self):
        base = super().to_dict()
        base.update({
            'child_id': self.child_id,
            'entity_id': self.entity_id,
            'entity_type': self.entity_type,
            'user_id': self.user_id,
            'status': self.status,
            'approved_at': self.approved_at
        })
        return base
