"""
Dell iDRAC 서버 관리 모델
backend/models/idrac_server.py
"""

from backend.models.user import db
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, Boolean


class IdracServer(db.Model):
    """iDRAC 서버 정보 모델"""
    __tablename__ = 'idrac_servers'
    
    id = Column(Integer, primary_key=True)
    name = Column(String(100), nullable=False)  # 서버명
    ip_address = Column(String(50), nullable=False, unique=True)  # iDRAC IP
    username = Column(String(50), default='root')  # iDRAC 사용자명
    password = Column(String(200), nullable=False)  # 비밀번호 (암호화 권장)
    
    # 분류 정보
    group_name = Column(String(100))  # 그룹명 (고객사, 프로젝트명)
    location = Column(String(100))  # 위치
    model = Column(String(100))  # 서버 모델
    
    # 상태 정보
    status = Column(String(20), default='registered')  # registered, online, offline, updating
    last_connected = Column(DateTime)  # 마지막 연결 시간
    last_updated = Column(DateTime)  # 마지막 업데이트 시간
    
    # 펌웨어 정보
    current_bios = Column(String(50))  # 현재 BIOS 버전
    target_bios = Column(String(50))  # 목표 BIOS 버전
    
    # 메타 정보
    notes = Column(String(500))  # 비고
    is_active = Column(Boolean, default=True)  # 활성화 여부
    created_at = Column(DateTime, default=datetime.utcnow)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    
    def to_dict(self):
        """딕셔너리로 변환"""
        return {
            'id': self.id,
            'name': self.name,
            'ip_address': self.ip_address,
            'username': self.username,
            'group_name': self.group_name,
            'location': self.location,
            'model': self.model,
            'status': self.status,
            'last_connected': self.last_connected.isoformat() if self.last_connected else None,
            'last_updated': self.last_updated.isoformat() if self.last_updated else None,
            'current_bios': self.current_bios,
            'target_bios': self.target_bios,
            'notes': self.notes,
            'is_active': self.is_active,
            'created_at': self.created_at.isoformat() if self.created_at else None
        }
    
    def __repr__(self):
        return f'<IdracServer {self.name} ({self.ip_address})>'
