"""
사용자 모델
"""
from sqlalchemy import Column, String, Boolean, DateTime, Text, Integer
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
import uuid

from ..core.database import Base


class User(Base):
    """사용자 테이블"""
    __tablename__ = "users"

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
    email = Column(String(255), unique=True, index=True, nullable=False)
    hashed_password = Column(String(255), nullable=False)
    full_name = Column(String(255), nullable=True)
    is_active = Column(Boolean, default=True)
    is_admin = Column(Boolean, default=False)
    
    # 권한 시스템 (서적관리, 노트관리, 소설관리)
    can_manage_books = Column(Boolean, default=True)  # 서적 관리 권한
    can_manage_notes = Column(Boolean, default=True)  # 노트 관리 권한
    can_manage_novels = Column(Boolean, default=True)  # 소설 관리 권한
    
    # 사용자 역할 (root, admin, user)
    role = Column(String(20), default="user")  # root, admin, user
    
    # 세션 타임아웃 설정 (분 단위, 0 = 무제한)
    session_timeout_minutes = Column(Integer, default=5)  # 기본 5분
    
    # 메타데이터
    created_at = Column(DateTime(timezone=True), server_default=func.now())
    updated_at = Column(DateTime(timezone=True), onupdate=func.now())
    last_login = Column(DateTime(timezone=True), nullable=True)
    
    # 사용자 설정
    theme = Column(String(50), default="light")  # light, dark
    language = Column(String(10), default="ko")  # ko, en
    timezone = Column(String(50), default="Asia/Seoul")
    
    # 관계 (lazy loading을 위해 문자열로 참조)
    memo_trees = relationship("MemoTree", back_populates="user", lazy="dynamic")
    memo_nodes = relationship("MemoNode", back_populates="user", lazy="dynamic")
    
    def __repr__(self):
        return f"<User(email='{self.email}', full_name='{self.full_name}')>"
