#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
약재 효능 태그 시스템 추가 스크립트
"""

import sqlite3

def check_and_create_efficacy_system():
    conn = sqlite3.connect('database/kdrug.db')
    cursor = conn.cursor()

    try:
        # 1. 현재 테이블 확인
        cursor.execute("""
            SELECT name FROM sqlite_master
            WHERE type='table'
            ORDER BY name
        """)
        print("=== 현재 테이블 목록 ===")
        for table in cursor.fetchall():
            print(f"  - {table[0]}")

        # 2. herb_items 테이블 스키마 확인
        print("\n=== herb_items 테이블 구조 ===")
        cursor.execute("PRAGMA table_info(herb_items)")
        columns = cursor.fetchall()
        for col in columns:
            print(f"  {col[1]} ({col[2]})")

        # 3. 효능 태그 테이블 생성
        print("\n=== 효능 태그 시스템 생성 ===")

        # 효능 마스터 테이블
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS herb_efficacy_tags (
                tag_id INTEGER PRIMARY KEY AUTOINCREMENT,
                tag_name VARCHAR(50) NOT NULL UNIQUE,
                tag_category VARCHAR(50),  -- 보(補), 사(瀉), 온(溫), 량(涼) 등
                description TEXT,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            )
        """)
        print("✅ herb_efficacy_tags 테이블 생성")

        # 약재-효능 연결 테이블 (다대다)
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS herb_item_tags (
                herb_item_id INTEGER NOT NULL,
                tag_id INTEGER NOT NULL,
                PRIMARY KEY (herb_item_id, tag_id),
                FOREIGN KEY (herb_item_id) REFERENCES herb_items(herb_item_id) ON DELETE CASCADE,
                FOREIGN KEY (tag_id) REFERENCES herb_efficacy_tags(tag_id) ON DELETE CASCADE
            )
        """)
        print("✅ herb_item_tags 테이블 생성")

        # 4. 기본 효능 태그 추가
        basic_tags = [
            ('보혈', '보', '혈을 보하는 효능'),
            ('보기', '보', '기를 보하는 효능'),
            ('보양', '보', '양기를 보하는 효능'),
            ('보음', '보', '음액을 보하는 효능'),
            ('활혈', '활', '혈액순환을 활발하게 하는 효능'),
            ('거담', '거', '가래를 제거하는 효능'),
            ('온중', '온', '속을 따뜻하게 하는 효능'),
            ('온양', '온', '양기를 따뜻하게 하는 효능'),
            ('청열', '청', '열을 내리는 효능'),
            ('해표', '해', '표증을 해소하는 효능'),
            ('소화', '소', '소화를 돕는 효능'),
            ('이수', '이', '수분대사를 돕는 효능'),
            ('안신', '안', '정신을 안정시키는 효능'),
            ('지혈', '지', '출혈을 멈추는 효능'),
            ('조화제약', '조화', '여러 약재를 조화롭게 하는 효능'),
            ('대보원기', '대보', '원기를 크게 보하는 효능'),
            ('보기건비', '보', '기를 보하고 비장을 건강하게 하는 효능'),
            ('보중익기', '보', '중초를 보하고 기를 증진시키는 효능'),
        ]

        for tag_name, category, description in basic_tags:
            cursor.execute("""
                INSERT OR IGNORE INTO herb_efficacy_tags (tag_name, tag_category, description)
                VALUES (?, ?, ?)
            """, (tag_name, category, description))

        print(f"✅ {len(basic_tags)}개 기본 효능 태그 추가")

        # 5. 쌍화탕 약재들에 효능 태그 연결
        ssanghwa_herbs = [
            ('숙지황', '보혈'),
            ('당귀', '보혈'),
            ('백작약', '보혈'),
            ('천궁', '활혈'),
            ('황기', '보기'),
            ('인삼', '대보원기'),
            ('백출', '보기건비'),
            ('감초', '조화제약'),
            ('생강', '온중'),
            ('대추', '보중익기'),
            ('육계', '온양'),
            ('건강', '온중'),
        ]

        print("\n=== 약재별 효능 태그 연결 ===")
        for herb_name, tag_name in ssanghwa_herbs:
            # 약재 ID 찾기
            cursor.execute("SELECT herb_item_id FROM herb_items WHERE herb_name = ?", (herb_name,))
            herb_result = cursor.fetchone()

            # 태그 ID 찾기
            cursor.execute("SELECT tag_id FROM herb_efficacy_tags WHERE tag_name = ?", (tag_name,))
            tag_result = cursor.fetchone()

            if herb_result and tag_result:
                herb_id = herb_result[0]
                tag_id = tag_result[0]

                cursor.execute("""
                    INSERT OR IGNORE INTO herb_item_tags (herb_item_id, tag_id)
                    VALUES (?, ?)
                """, (herb_id, tag_id))
                print(f"  ✅ {herb_name} → {tag_name}")
            else:
                if not herb_result:
                    print(f"  ⚠️  {herb_name} 약재 없음")
                if not tag_result:
                    print(f"  ⚠️  {tag_name} 태그 없음")

        conn.commit()

        # 6. 결과 확인 - 약재별 태그 조회
        print("\n=== 약재별 효능 태그 확인 ===")
        cursor.execute("""
            SELECT
                h.herb_name,
                GROUP_CONCAT(t.tag_name, ', ') as tags
            FROM herb_items h
            LEFT JOIN herb_item_tags ht ON h.herb_item_id = ht.herb_item_id
            LEFT JOIN herb_efficacy_tags t ON ht.tag_id = t.tag_id
            WHERE ht.tag_id IS NOT NULL
            GROUP BY h.herb_item_id
            ORDER BY h.herb_name
        """)

        results = cursor.fetchall()
        for herb_name, tags in results:
            print(f"  {herb_name}: {tags}")

        print("\n✅ 효능 태그 시스템 구축 완료!")

    except Exception as e:
        print(f"❌ 오류 발생: {e}")
        conn.rollback()
    finally:
        conn.close()

if __name__ == "__main__":
    check_and_create_efficacy_system()