from datetime import datetime
from sqlalchemy import String, DateTime, Text, Boolean, func
from sqlalchemy.orm import Mapped, mapped_column, relationship

from app.models.database import Base


class AlfrescoConnection(Base):
    __tablename__ = "alfresco_connections"

    id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    name: Mapped[str] = mapped_column(String(255), nullable=False)
    base_url: Mapped[str] = mapped_column(String(1024), nullable=False)
    ip_server: Mapped[str | None] = mapped_column(String(45), nullable=True)
    username: Mapped[str] = mapped_column(String(255), nullable=True)
    password_hash: Mapped[str] = mapped_column(String(512), nullable=True)
    api_username: Mapped[str | None] = mapped_column(String(255), nullable=True)
    api_password_hash: Mapped[str | None] = mapped_column(String(512), nullable=True)
    client_id: Mapped[str] = mapped_column(String(255), nullable=True)
    client_secret_hash: Mapped[str] = mapped_column(String(512), nullable=True)
    auth_type: Mapped[str] = mapped_column(String(50), default="basic")
    active: Mapped[bool] = mapped_column(Boolean, default=True)
    last_check_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)
    last_check_status: Mapped[str | None] = mapped_column(String(50), nullable=True)
    notes: Mapped[str | None] = mapped_column(Text, nullable=True)
    created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
    updated_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now(), onupdate=func.now())

    sites = relationship("AlfrescoSite", back_populates="connection", cascade="all, delete-orphan")
