import pyodbc


class SQLClient:
    def __init__(self):
        self.conn   = None
        self.cursor = None

    def connect(self, server: str, database: str,
                username: str, password: str) -> bool:
        try:
            conn_str = (
                f"DRIVER={{ODBC Driver 18 for SQL Server}};"
                f"SERVER={server};"
                f"DATABASE={database};"
                f"UID={username};"
                f"PWD={password};"
                f"TrustServerCertificate=yes;"
                f"Encrypt=optional;"
            )
            self.conn   = pyodbc.connect(conn_str, timeout=10)
            self.cursor = self.conn.cursor()
            print(f"[DB] 연결 성공: {server}/{database}")
            return True
        except Exception as e:
            print(f"[DB] 연결 실패: {e}")
            self.conn = None
            return False

    def disconnect(self):
        if self.cursor:
            self.cursor.close()
        if self.conn:
            self.conn.close()
        self.conn   = None
        self.cursor = None
        print("[DB] 연결 해제")

    def is_connected(self) -> bool:
        return self.conn is not None

    def get_reflector_list(self) -> list:
        """
        vi_AI_mt_Article 뷰에서 리플렉터 제품 목록 조회.
        반환: [{"article_id": ..., "article": ..., "buyer_article_no": ...}, ...]
        """
        if not self.is_connected():
            return []
        try:
            self.cursor.execute("""
                SELECT ArticleID, Article, BuyerArticleNo
                FROM vi_AI_mt_Article
                WHERE Article LIKE '%REF%'
                ORDER BY ArticleID
            """)
            rows = self.cursor.fetchall()
            return [
                {
                    "article_id":      row[0],
                    "article":         row[1],
                    "buyer_article_no": row[2],
                }
                for row in rows
            ]
        except Exception as e:
            print(f"[DB] 조회 실패: {e}")
            return []

    def save_inspection_result(self, article_id: str,
                               result: str, score: float) -> bool:
        """검사 결과 저장 — 테이블 확정 후 구현."""
        # TODO: 결과 저장 테이블 확정 후 쿼리 구현
        print(f"[DB] 검사 결과 저장: {article_id} {result} {score}")
        return True
