#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Excel 파일 형식 분석 도구
한의사랑과 한의정보 형식 비교
"""

import pandas as pd
import sys
import os

sys.path.append(os.path.dirname(os.path.abspath(__file__)))

def analyze_excel_format(file_path, format_name):
    """Excel 파일 형식 분석"""
    print(f"\n{'='*60}")
    print(f"📊 {format_name} 형식 분석")
    print(f"파일: {file_path}")
    print('='*60)

    try:
        # Excel 파일 읽기
        df = pd.read_excel(file_path)

        # 기본 정보
        print(f"\n1️⃣ 기본 정보:")
        print(f"   - 행 개수: {len(df)}")
        print(f"   - 열 개수: {len(df.columns)}")

        # 컬럼 정보
        print(f"\n2️⃣ 컬럼 목록:")
        for i, col in enumerate(df.columns, 1):
            print(f"   {i}. {col}")

        # 데이터 타입
        print(f"\n3️⃣ 데이터 타입:")
        for col in df.columns:
            print(f"   - {col}: {df[col].dtype}")

        # 샘플 데이터 (처음 3행)
        print(f"\n4️⃣ 샘플 데이터 (처음 3행):")
        print(df.head(3).to_string(index=False))

        # 누락 데이터 확인
        print(f"\n5️⃣ 누락 데이터:")
        null_counts = df.isnull().sum()
        for col in df.columns:
            if null_counts[col] > 0:
                print(f"   - {col}: {null_counts[col]}개 누락")
        if null_counts.sum() == 0:
            print("   - 누락 데이터 없음")

        # 고유값 개수 (참고용)
        print(f"\n6️⃣ 고유값 개수:")
        for col in df.columns:
            unique_count = df[col].nunique()
            print(f"   - {col}: {unique_count}개")

        return df

    except Exception as e:
        print(f"❌ 오류 발생: {str(e)}")
        return None

def compare_formats(df1, df2, name1, name2):
    """두 형식 비교"""
    print(f"\n{'='*60}")
    print(f"🔄 {name1} vs {name2} 형식 비교")
    print('='*60)

    if df1 is None or df2 is None:
        print("비교할 수 없습니다 (데이터 로드 실패)")
        return

    cols1 = set(df1.columns)
    cols2 = set(df2.columns)

    # 공통 컬럼
    common = cols1.intersection(cols2)
    print(f"\n✅ 공통 컬럼 ({len(common)}개):")
    for col in sorted(common):
        print(f"   - {col}")

    # 한의사랑에만 있는 컬럼
    only_in_1 = cols1 - cols2
    if only_in_1:
        print(f"\n📌 {name1}에만 있는 컬럼 ({len(only_in_1)}개):")
        for col in sorted(only_in_1):
            print(f"   - {col}")

    # 한의정보에만 있는 컬럼
    only_in_2 = cols2 - cols1
    if only_in_2:
        print(f"\n📌 {name2}에만 있는 컬럼 ({len(only_in_2)}개):")
        for col in sorted(only_in_2):
            print(f"   - {col}")

    # 컬럼명 매핑 추천
    print(f"\n🔗 컬럼 매핑 추천:")

    # 가능한 매핑 찾기
    mappings = []

    # 날짜 관련
    date_cols1 = [c for c in cols1 if '일' in c or '날짜' in c or 'date' in c.lower()]
    date_cols2 = [c for c in cols2 if '일' in c or '날짜' in c or 'date' in c.lower()]
    if date_cols1 and date_cols2:
        mappings.append((date_cols1[0], date_cols2[0], "날짜"))

    # 약재명 관련
    herb_cols1 = [c for c in cols1 if '약재' in c or '품목' in c or '제품' in c]
    herb_cols2 = [c for c in cols2 if '약재' in c or '품목' in c or '제품' in c]
    if herb_cols1 and herb_cols2:
        mappings.append((herb_cols1[0], herb_cols2[0], "약재명"))

    # 수량 관련
    qty_cols1 = [c for c in cols1 if '수량' in c or '량' in c or '구입량' in c]
    qty_cols2 = [c for c in cols2 if '수량' in c or '량' in c or '구입량' in c]
    if qty_cols1 and qty_cols2:
        mappings.append((qty_cols1[0], qty_cols2[0], "수량"))

    # 금액 관련
    amt_cols1 = [c for c in cols1 if '금액' in c or '액' in c or '가격' in c]
    amt_cols2 = [c for c in cols2 if '금액' in c or '액' in c or '가격' in c]
    if amt_cols1 and amt_cols2:
        mappings.append((amt_cols1[0], amt_cols2[0], "금액"))

    # 업체 관련
    supplier_cols1 = [c for c in cols1 if '업체' in c or '도매' in c or '공급' in c]
    supplier_cols2 = [c for c in cols2 if '업체' in c or '도매' in c or '공급' in c]
    if supplier_cols1 and supplier_cols2:
        mappings.append((supplier_cols1[0], supplier_cols2[0], "공급업체"))

    # 원산지 관련
    origin_cols1 = [c for c in cols1 if '원산지' in c or '산지' in c]
    origin_cols2 = [c for c in cols2 if '원산지' in c or '산지' in c]
    if origin_cols1 and origin_cols2:
        mappings.append((origin_cols1[0], origin_cols2[0], "원산지"))

    for col1, col2, mapping_type in mappings:
        print(f"   - {mapping_type}: [{name1}]{col1} ↔ [{name2}]{col2}")

def main():
    """메인 함수"""
    print("\n" + "="*60)
    print("🏥 한약 입고장 Excel 형식 분석기")
    print("="*60)

    # 파일 경로
    hanisarang_path = '/root/kdrug/sample/한의사랑.xlsx'
    haninfo_path = '/root/kdrug/sample/한의정보.xlsx'
    current_path = '/root/kdrug/sample/order_view_20260215154829.xlsx'

    # 각 형식 분석
    df_hanisarang = None
    df_haninfo = None
    df_current = None

    if os.path.exists(hanisarang_path):
        df_hanisarang = analyze_excel_format(hanisarang_path, "한의사랑")
    else:
        print(f"❌ 한의사랑 파일을 찾을 수 없음: {hanisarang_path}")

    if os.path.exists(haninfo_path):
        df_haninfo = analyze_excel_format(haninfo_path, "한의정보")
    else:
        print(f"❌ 한의정보 파일을 찾을 수 없음: {haninfo_path}")

    # 현재 사용 중인 형식도 분석
    if os.path.exists(current_path):
        df_current = analyze_excel_format(current_path, "현재 사용 중")

    # 형식 비교
    if df_hanisarang is not None and df_haninfo is not None:
        compare_formats(df_hanisarang, df_haninfo, "한의사랑", "한의정보")

    # 통합 매핑 제안
    print(f"\n{'='*60}")
    print("💡 통합 컬럼 매핑 제안")
    print('='*60)

    print("""
시스템에서 사용할 표준 컬럼:
1. insurance_code (보험코드/제품코드)
2. supplier_name (업체명/도매상)
3. herb_name (약재명/품목명)
4. receipt_date (구입일자/입고일)
5. quantity (구입량/수량) - 그램 단위
6. total_amount (구입액/금액)
7. origin_country (원산지)
8. unit_price (단가) - 계산 가능한 경우

각 형식별 매핑 규칙을 자동으로 적용하여
어떤 형식의 Excel 파일도 처리 가능하도록 구현 가능
""")

if __name__ == "__main__":
    main()