import enum
from datetime import datetime
from typing import List, Optional

from sqlalchemy import DECIMAL, Boolean, Column, DateTime
from sqlalchemy import Enum
from sqlalchemy import Enum as SAEnum
from sqlalchemy import ForeignKey, Integer, String, Text, UniqueConstraint
from sqlalchemy.orm import relationship
from src.core.models.base import Base 

class CurrencyRate(Base):
    __tablename__ = "currency_rates"
    
    id = Column(Integer, primary_key=True, index=True)
    base = Column(String, nullable=False)
    currency = Column(String, nullable=False, unique=True)
    rate = Column(DECIMAL(scale=10), nullable=False)
    
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    deleted_at = Column(DateTime, nullable=True)

class Currency(Base):
    __tablename__ = "currencies"

    id = Column(Integer, primary_key=True, index=True)
    code = Column(String, nullable=False, unique=True)
    name = Column(String, nullable=False)
    alias = Column(String, nullable=True)

    created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
    deleted_at = Column(DateTime, nullable=True)

    @property
    def aliases(self) -> List[str]:
        """
        Splits the alias field into a list of aliases if it is not blank.

        Returns:
            List[str]: A list of aliases.
        """
        if self.alias and self.alias.strip():
            return self.alias.split("|")
        return []

