# -*- coding: utf-8 -*-
"""
확실한 매칭만 일괄 등록
"""
import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.path.insert(0, 'c:\\Users\\청춘약국\\source\\pharmacy-pos-qr-system\\backend')

from db.dbsetup import get_db_session
from sqlalchemy import text
from datetime import datetime

# 확실한 매칭 목록 (MSSQL 제품명, DrugCode, APC)
MAPPINGS = [
    # 파라캅
    ('파라캅L(5kg이상)', 'LB000003159', '0230338510101'),  # 파라캅 L 정 10정
    ('파라캅S(5kg이하)', 'LB000003160', '0230347110106'),  # 파라캅 에스 정 10정
    # 세레니아
    ('세레니아정16mg(개멀미약)', 'LB000003353', '0231884610109'),  # 세레니아 정 16mg / 4정
    ('세레니아정24mg(개멀미약)', 'LB000003354', '0231884620107'),  # 세레니아 정 24mg / 4정
    # ── 2차 매칭 (2026-03-08) ──
    # 클라펫 (유일후보)
    ('(판)클라펫정50(100정)', 'LB000003504', '0232065900005'),  # 클라펫 정
    # 넥스가드 (체중매칭)
    ('넥스가드L(15~30kg)', 'LB000003531', '0232155400009'),  # 넥스가드 스펙트라 츄어블 정 대형견용
    ('넥스가드xs(2~3.5kg)', 'LB000003530', '0232169000004'),  # 넥스가드 츄어블 정 소형견용
    # 하트웜 (체중매칭)
    ('하트웜솔루션츄어블M(12~22kg)', 'LB000003155', '0230758520105'),  # 하트웜 솔루션 츄어블 0.136mg / 114mg / 6 정
    ('하트웜솔루션츄어블S(11kg이하)', 'LB000003156', '0230758510107'),  # 하트웜 솔루션 츄어블 0.068mg / 57mg / 6 정
]

session = get_db_session('PM_DRUG')
today = datetime.now().strftime('%Y%m%d')

print('=== 일괄 APC 매핑 ===\n')

for name, drugcode, apc in MAPPINGS:
    # 기존 가격 조회
    existing = session.execute(text("""
        SELECT TOP 1 CD_MY_UNIT, CD_IN_UNIT 
        FROM CD_ITEM_UNIT_MEMBER 
        WHERE DRUGCODE = :dc
        ORDER BY SN DESC
    """), {'dc': drugcode}).fetchone()
    
    if not existing:
        print(f'❌ {name}: 기존 레코드 없음')
        continue
    
    # 이미 APC 있는지 확인
    check = session.execute(text("""
        SELECT 1 FROM CD_ITEM_UNIT_MEMBER 
        WHERE DRUGCODE = :dc AND CD_CD_BARCODE = :apc
    """), {'dc': drugcode, 'apc': apc}).fetchone()
    
    if check:
        print(f'⏭️ {name}: 이미 등록됨')
        continue
    
    # INSERT
    try:
        session.execute(text("""
            INSERT INTO CD_ITEM_UNIT_MEMBER (
                DRUGCODE, CD_CD_UNIT, CD_NM_UNIT, CD_MY_UNIT, CD_IN_UNIT,
                CD_CD_BARCODE, CD_CD_POS, CHANGE_DATE
            ) VALUES (
                :drugcode, '015', 1.0, :my_unit, :in_unit,
                :barcode, '', :change_date
            )
        """), {
            'drugcode': drugcode,
            'my_unit': existing.CD_MY_UNIT,
            'in_unit': existing.CD_IN_UNIT,
            'barcode': apc,
            'change_date': today
        })
        session.commit()
        print(f'✅ {name} → {apc}')
    except Exception as e:
        session.rollback()
        print(f'❌ {name}: {e}')

session.close()
print('\n완료!')
