"""
員工個人化服務設定 Model
記錄員工啟用的個人化服務（SSO, Email, Calendar, Drive, Office）
"""
from datetime import datetime
from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import relationship

from app.db.base import Base


class EmpPersonalServiceSetting(Base):
    """員工個人化服務設定表"""

    __tablename__ = "tenant_emp_personal_service_settings"
    __table_args__ = (
        UniqueConstraint("tenant_id", "keycloak_user_id", "service_id", name="uq_emp_service"),
        Index("idx_emp_service_tenant", "tenant_id"),
        Index("idx_emp_service_user", "keycloak_user_id"),
        Index("idx_emp_service_service", "service_id"),
    )

    id = Column(Integer, primary_key=True, index=True)
    tenant_id = Column(Integer, ForeignKey("tenants.id", ondelete="CASCADE"), nullable=False,
                       comment="租戶 ID")
    keycloak_user_id = Column(String(36), nullable=False, comment="Keycloak User UUID")
    service_id = Column(Integer, ForeignKey("personal_services.id", ondelete="CASCADE"), nullable=False,
                        comment="個人化服務 ID")

    # 服務配額設定（依服務類型不同）
    quota_gb = Column(Integer, nullable=True, comment="儲存配額 (GB)，適用於 Drive")
    quota_mb = Column(Integer, nullable=True, comment="郵件配額 (MB)，適用於 Email")

    # 審計欄位（完整記錄）
    enabled_at = Column(DateTime, default=datetime.utcnow, nullable=False, comment="啟用時間")
    enabled_by = Column(String(36), nullable=True, comment="啟用者 keycloak_user_id")
    disabled_at = Column(DateTime, nullable=True, comment="停用時間（軟刪除）")
    disabled_by = Column(String(36), nullable=True, comment="停用者 keycloak_user_id")

    # 通用欄位
    is_active = Column(Boolean, default=True, nullable=False, comment="是否啟用")
    edit_by = Column(String(36), nullable=True, comment="最後編輯者 keycloak_user_id")
    created_at = Column(DateTime, default=datetime.utcnow, nullable=False, comment="建立時間")
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False, comment="更新時間")

    # 關聯
    service = relationship("PersonalService")

    def __repr__(self):
        return f"<EmpPersonalServiceSetting user={self.keycloak_user_id} service={self.service_id}>"
