# -*- coding: utf-8 -*-
"""
동원약품 도매상 API - Flask Blueprint

핵심 로직은 wholesale 패키지에서 가져옴
이 파일은 Flask 웹 API 연동만 담당
"""

import time
import logging
from datetime import datetime

from flask import Blueprint, jsonify, request as flask_request

# wholesale 패키지 경로 설정
import wholesale_path

# wholesale 패키지에서 핵심 클래스 가져오기
from wholesale import DongwonSession

logger = logging.getLogger(__name__)

# Blueprint 생성
dongwon_bp = Blueprint('dongwon', __name__, url_prefix='/api/dongwon')


# ========== 세션 관리 ==========

_dongwon_session = None

def get_dongwon_session():
    global _dongwon_session
    if _dongwon_session is None:
        _dongwon_session = DongwonSession()
    return _dongwon_session


def search_dongwon_stock(keyword: str, search_type: str = 'name'):
    """동원약품 재고 검색"""
    try:
        session = get_dongwon_session()
        result = session.search_products(keyword)
        
        if result.get('success'):
            return {
                'success': True,
                'keyword': keyword,
                'search_type': search_type,
                'count': result.get('total', 0),
                'items': result.get('items', [])
            }
        else:
            return result
        
    except Exception as e:
        logger.error(f"동원약품 검색 오류: {e}")
        return {'success': False, 'error': 'SEARCH_ERROR', 'message': str(e)}


# ========== Flask API Routes ==========

@dongwon_bp.route('/stock', methods=['GET'])
def api_dongwon_stock():
    """
    동원약품 재고 조회 API
    
    GET /api/dongwon/stock?keyword=타이레놀
    """
    keyword = flask_request.args.get('keyword', '').strip()
    
    if not keyword:
        return jsonify({
            'success': False,
            'error': 'MISSING_PARAM',
            'message': 'keyword 파라미터가 필요합니다.'
        }), 400
    
    result = search_dongwon_stock(keyword)
    return jsonify(result)


@dongwon_bp.route('/session', methods=['GET'])
def api_dongwon_session():
    """동원약품 세션 상태 확인"""
    session = get_dongwon_session()
    return jsonify({
        'logged_in': getattr(session, '_logged_in', False),
        'last_login': getattr(session, '_last_login', 0),
        'session_age_sec': int(time.time() - session._last_login) if getattr(session, '_last_login', 0) else None
    })


@dongwon_bp.route('/balance', methods=['GET'])
def api_dongwon_balance():
    """
    동원약품 잔고 조회 API
    
    GET /api/dongwon/balance
    
    Returns:
        {
            "success": true,
            "balance": 7080018,         // 당월 잔고
            "prev_balance": 5407528,    // 전월 잔고
            "trade_amount": 1672490,    // 거래 금액
            "payment_amount": 0         // 결제 금액
        }
    """
    try:
        session = get_dongwon_session()
        result = session.get_balance()
        return jsonify(result)
    except Exception as e:
        logger.error(f"동원약품 잔고 조회 오류: {e}")
        return jsonify({
            'success': False,
            'error': 'BALANCE_ERROR',
            'message': str(e),
            'balance': 0
        }), 500


@dongwon_bp.route('/monthly-orders', methods=['GET'])
def api_dongwon_monthly_orders():
    """
    동원약품 월간 주문 조회 API
    
    GET /api/dongwon/monthly-orders?year=2026&month=3
    
    Returns:
        {
            "success": true,
            "year": 2026,
            "month": 3,
            "total_amount": 1815115,    // 주문 총액
            "approved_amount": 1672490, // 승인 금액
            "order_count": 23           // 주문 건수
        }
    """
    year = flask_request.args.get('year', type=int)
    month = flask_request.args.get('month', type=int)
    
    # 기본값: 현재 월
    if not year or not month:
        now = datetime.now()
        year = year or now.year
        month = month or now.month
    
    try:
        session = get_dongwon_session()
        result = session.get_monthly_orders(year, month)
        return jsonify(result)
    except Exception as e:
        logger.error(f"동원약품 월간 주문 조회 오류: {e}")
        return jsonify({
            'success': False,
            'error': 'MONTHLY_ORDERS_ERROR',
            'message': str(e)
        }), 500


@dongwon_bp.route('/cart', methods=['GET'])
def api_dongwon_cart():
    """
    동원약품 장바구니 조회 API
    
    GET /api/dongwon/cart
    """
    try:
        session = get_dongwon_session()
        result = session.get_cart()
        return jsonify(result)
    except Exception as e:
        logger.error(f"동원약품 장바구니 조회 오류: {e}")
        return jsonify({
            'success': False,
            'error': 'CART_ERROR',
            'message': str(e)
        }), 500


@dongwon_bp.route('/cart/add', methods=['POST'])
def api_dongwon_cart_add():
    """
    동원약품 장바구니 추가 API
    
    POST /api/dongwon/cart/add
    {
        "item_code": "A4394",
        "quantity": 2
    }
    """
    data = flask_request.get_json() or {}
    item_code = data.get('item_code', '').strip()
    quantity = data.get('quantity', 1)
    
    if not item_code:
        return jsonify({
            'success': False,
            'error': 'MISSING_PARAM',
            'message': 'item_code가 필요합니다.'
        }), 400
    
    try:
        session = get_dongwon_session()
        result = session.add_to_cart(item_code, quantity)
        return jsonify(result)
    except Exception as e:
        logger.error(f"동원약품 장바구니 추가 오류: {e}")
        return jsonify({
            'success': False,
            'error': 'CART_ADD_ERROR',
            'message': str(e)
        }), 500


@dongwon_bp.route('/orders/summary-by-kd', methods=['GET'])
def api_dongwon_orders_by_kd():
    """
    동원약품 주문량 KD코드별 집계 API
    
    GET /api/dongwon/orders/summary-by-kd?start_date=2026-03-01&end_date=2026-03-07
    
    흐름:
    1. 주문 목록 API → 주문번호 목록
    2. 각 주문번호 → HTML 파싱 → ItemCode 목록
    3. 각 ItemCode → itemInfoAx → KD코드, 규격, 수량
    4. KD코드별 집계
    
    Returns:
        {
            "success": true,
            "order_count": 4,
            "by_kd_code": {
                "642900680": {
                    "product_name": "사미온정10mg",
                    "spec": "30정(병)",
                    "boxes": 3,
                    "units": 90
                }
            },
            "total_products": 15
        }
    """
    from datetime import datetime
    
    today = datetime.now()
    start_date = flask_request.args.get('start_date', today.strftime("%Y-%m-%d")).strip()
    end_date = flask_request.args.get('end_date', today.strftime("%Y-%m-%d")).strip()
    
    try:
        session = get_dongwon_session()
        
        # 새로운 get_orders_by_kd_code 메서드 사용
        result = session.get_orders_by_kd_code(start_date, end_date)
        
        return jsonify(result)
        
    except Exception as e:
        logger.error(f"동원약품 주문량 집계 오류: {e}")
        return jsonify({
            'success': False,
            'error': 'API_ERROR',
            'message': str(e),
            'by_kd_code': {},
            'order_count': 0
        }), 500
