"""
Statin 근육병증의 스펙트럼 분석
왜 CK 측정이 중요한가?
"""

import sys
import os

if sys.platform == 'win32':
    import io
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
    sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')

from Bio import Entrez
from dotenv import load_dotenv

load_dotenv()

Entrez.email = os.getenv('PUBMED_EMAIL', 'test@example.com')


def search_statin_myopathy_spectrum():
    """Statin 근육병증의 심각도 스펙트럼 관련 논문 검색"""

    print("=" * 80)
    print("Statin 근육병증의 종류와 CK의 관계")
    print("=" * 80)

    # 검색: Statin myopathy classification
    query = "statin myopathy classification creatine kinase"

    try:
        handle = Entrez.esearch(
            db="pubmed",
            term=query,
            retmax=3,
            sort="relevance"
        )
        record = Entrez.read(handle)
        handle.close()

        pmids = record["IdList"]

        if pmids:
            handle = Entrez.efetch(
                db="pubmed",
                id=pmids,
                rettype="medline",
                retmode="xml"
            )
            papers = Entrez.read(handle)
            handle.close()

            print(f"\n관련 논문 {len(pmids)}건 발견:\n")

            for idx, paper in enumerate(papers['PubmedArticle'], 1):
                article = paper['MedlineCitation']['Article']
                pmid = str(paper['MedlineCitation']['PMID'])
                title = article.get('ArticleTitle', '')

                # 초록
                abstract_parts = article.get('Abstract', {}).get('AbstractText', [])
                if abstract_parts:
                    if isinstance(abstract_parts, list):
                        abstract = ' '.join([str(part) for part in abstract_parts])[:300]
                    else:
                        abstract = str(abstract_parts)[:300]
                else:
                    abstract = "(초록 없음)"

                print(f"[{idx}] PMID: {pmid}")
                print(f"제목: {title}")
                print(f"초록: {abstract}...")
                print(f"링크: https://pubmed.ncbi.nlm.nih.gov/{pmid}/")
                print("-" * 80)

    except Exception as e:
        print(f"[ERROR] 검색 실패: {e}")


def print_myopathy_spectrum():
    """Statin 근육병증 스펙트럼 설명"""

    print("\n\n" + "=" * 80)
    print("Statin 근육병증의 스펙트럼 (경증 → 중증)")
    print("=" * 80)

    spectrum = [
        {
            "type": "1. Myalgia (근육통)",
            "prevalence": "5-10%",
            "ck_level": "정상 (Normal)",
            "symptoms": "근육 통증, 뻐근함",
            "severity": "경증",
            "management": "CoQ10, 용량 조절"
        },
        {
            "type": "2. Myopathy (근육병증)",
            "prevalence": "0.1-0.5%",
            "ck_level": "경도 상승 (<10배)",
            "symptoms": "근육 약화, 통증",
            "severity": "중등도",
            "management": "Statin 변경/중단"
        },
        {
            "type": "3. Rhabdomyolysis (횡문근융해증)",
            "prevalence": "0.01%",
            "ck_level": "심각한 상승 (>10배, 수천~수만)",
            "symptoms": "심한 근육 통증, 갈색 소변, 급성 신부전",
            "severity": "중증 (응급)",
            "management": "즉시 중단, 입원 치료"
        }
    ]

    for item in spectrum:
        print(f"\n【{item['type']}】")
        print(f"  발생률:     {item['prevalence']}")
        print(f"  CK 수치:    {item['ck_level']}")
        print(f"  증상:       {item['symptoms']}")
        print(f"  심각도:     {item['severity']}")
        print(f"  관리:       {item['management']}")
        print("-" * 80)

    print("\n\n" + "=" * 80)
    print("왜 논문에서 CK를 측정했는가?")
    print("=" * 80)

    reasons = [
        {
            "이유": "1. 안전성 확인",
            "설명": """
CoQ10 보충이 단순히 '증상을 가리는 것'인지, 아니면 '실제로 근육을
보호하는 것'인지 확인하기 위함.

만약 CK가 계속 상승한다면?
→ 근육 손상이 진행 중이므로 위험
→ 증상만 완화되면 환자가 모르고 계속 복용 → 횡문근융해증 위험

CK가 정상이면?
→ 실제 근육 손상은 없음
→ CoQ10으로 증상만 관리하면 안전
            """
        },
        {
            "이유": "2. 메커니즘 이해",
            "설명": """
결과: 증상 개선 (O), CK 변화 없음 (-)

→ 이것이 의미하는 것:
   CoQ10은 "근육 재생" 효과가 아님
   대신 "미토콘드리아 기능 회복" 효과

Statin 근육통 = 구조적 손상(X), 기능적 문제(O)
            """
        },
        {
            "이유": "3. 객관적 평가",
            "설명": """
문제: 근육 통증은 주관적 증상 (placebo 효과 가능)

해결: CK는 객관적 바이오마커
   - 환자가 "덜 아프다"고 느낌 (주관적)
   - CK 정상 유지 (객관적) → 실제로 안전함을 증명
            """
        },
        {
            "이유": "4. 임상 지침 반영",
            "설명": """
미국심장학회(ACC/AHA) Statin 안전성 가이드라인:

【CK 측정 시점】
- 치료 전 베이스라인
- 근육 증상 발생 시
- CK > 정상의 10배 → 즉시 중단

논문에서 CK를 측정한 것은 이 가이드라인을 따른 것
            """
        }
    ]

    for item in reasons:
        print(f"\n【{item['이유']}】")
        print(item['설명'])
        print("-" * 80)


def main():
    # 1. Statin 근육병증 스펙트럼 설명
    print_myopathy_spectrum()

    # 2. 관련 논문 검색
    print("\n\n" + "=" * 80)
    print("관련 논문 검색 중...")
    print("=" * 80)
    search_statin_myopathy_spectrum()

    # 3. 결론
    print("\n\n" + "=" * 80)
    print("결론: 논문에서 CK를 측정한 이유")
    print("=" * 80)
    print("""
1️⃣ 안전성: CoQ10이 증상만 가리는 게 아니라 실제로 안전한지 확인
2️⃣ 메커니즘: 근육 손상(X), 미토콘드리아 기능 저하(O)임을 증명
3️⃣ 객관성: 주관적 증상뿐 아니라 객관적 지표로도 안전함을 입증
4️⃣ 임상 적용: 실제 진료 시 CK 검사 없이 CoQ10 권장 가능

→ CK 정상 = "CoQ10 + Statin 병용이 안전하다"는 강력한 근거
    """)


if __name__ == '__main__':
    main()
