"""
통합 테스트: QR 라벨 전체 흐름
토큰 생성 → DB 저장 → QR 라벨 이미지 생성
"""

import sys
import os
from datetime import datetime

# Path setup
sys.path.insert(0, os.path.join(os.path.dirname(__file__)))

from utils.qr_token_generator import generate_claim_token, save_token_to_db
from utils.qr_label_printer import print_qr_label

def test_full_flow():
    """전체 흐름 테스트"""

    # 1. 테스트 데이터 (새로운 거래 ID)
    test_tx_id = datetime.now().strftime("TEST%Y%m%d%H%M%S")
    test_amount = 75000.0
    test_time = datetime.now()

    print("=" * 80)
    print("QR 라벨 통합 테스트")
    print("=" * 80)
    print(f"거래 ID: {test_tx_id}")
    print(f"판매 금액: {test_amount:,}원")
    print()

    # 2. 토큰 생성
    print("[1/3] Claim Token 생성...")
    token_info = generate_claim_token(test_tx_id, test_amount)

    print(f"  [OK] 토큰 원문: {token_info['token_raw'][:50]}...")
    print(f"  [OK] 토큰 해시: {token_info['token_hash'][:32]}...")
    print(f"  [OK] QR URL: {token_info['qr_url']}")
    print(f"  [OK] URL 길이: {len(token_info['qr_url'])} 문자")
    print(f"  [OK] 적립 포인트: {token_info['claimable_points']}P")
    print()

    # 3. DB 저장
    print("[2/3] SQLite DB 저장...")
    success, error = save_token_to_db(
        test_tx_id,
        token_info['token_hash'],
        test_amount,
        token_info['claimable_points'],
        token_info['expires_at'],
        token_info['pharmacy_id']
    )

    if not success:
        print(f"  [ERROR] DB 저장 실패: {error}")
        return False

    print(f"  [OK] DB 저장 성공")
    print()

    # 4. QR 라벨 생성 (미리보기 모드)
    print("[3/3] QR 라벨 이미지 생성...")
    success, image_path = print_qr_label(
        token_info['qr_url'],
        test_tx_id,
        test_amount,
        token_info['claimable_points'],
        test_time,
        preview_mode=True
    )

    if not success:
        print(f"  [ERROR] 이미지 생성 실패")
        return False

    print(f"  [OK] 이미지 저장: {image_path}")
    print()

    # 5. 결과 요약
    print("=" * 80)
    print("[SUCCESS] 통합 테스트 성공!")
    print("=" * 80)
    print(f"QR URL: {token_info['qr_url']}")
    print(f"이미지 파일: {image_path}")
    print(f"\n다음 명령으로 확인:")
    print(f"  start {image_path}")
    print("=" * 80)

    return True

if __name__ == "__main__":
    try:
        success = test_full_flow()
        sys.exit(0 if success else 1)
    except Exception as e:
        print(f"\n[ERROR] 테스트 실패: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)
