"""数据库配置模型"""

from sqlalchemy import Column, Integer, String, Text, DateTime, Boolean, JSON
from sqlalchemy.sql import func
from ..db.base import BaseModel


# 在现有的DatabaseConfig类中添加关系
from sqlalchemy.orm import relationship

class DatabaseConfig(BaseModel):
    """数据库配置表"""
    __tablename__ = "database_configs"
    
    id = Column(Integer, primary_key=True, index=True) 
    name = Column(String(100), nullable=False)  # 配置名称
    db_type = Column(String(20), nullable=False, unique=True)  # 数据库类型：postgresql, mysql等
    host = Column(String(255), nullable=False)
    port = Column(Integer, nullable=False)
    database = Column(String(100), nullable=False)
    username = Column(String(100), nullable=False)
    password = Column(Text, nullable=False)  # 加密存储
    is_active = Column(Boolean, default=True)
    is_default = Column(Boolean, default=False)
    connection_params = Column(JSON, nullable=True)  # 额外连接参数 
    
    def to_dict(self, include_password=False, decrypt_service=None):
        result = {
            "id": self.id,
            "created_by": self.created_by,
            "name": self.name,
            "db_type": self.db_type,
            "host": self.host,
            "port": self.port,
            "database": self.database,
            "username": self.username,
            "is_active": self.is_active,
            "is_default": self.is_default,
            "connection_params": self.connection_params,
            "created_at": self.created_at.isoformat() if self.created_at else None,
            "updated_at": self.updated_at.isoformat() if self.updated_at else None
        }
        
        # 如果需要包含密码且提供了解密服务
        if include_password and decrypt_service:
            print('begin decrypt password')
            result["password"] = decrypt_service._decrypt_password(self.password)
        
        return result
    
    # 添加关系
    # table_metadata = relationship("TableMetadata", back_populates="database_config")