#!/usr/bin/env python
"""
API服务启动脚本
用于启动Flask API服务，确保所有必要的模块能被正确导入
"""

import os
import sys
import logging
import importlib.util

# 设置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

# 获取项目根目录的绝对路径
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_ROOT = os.path.dirname(ROOT_DIR)

# 添加项目根目录到 Python 路径
sys.path.append(PROJECT_ROOT)
sys.path.append(ROOT_DIR)

# 确保所有必要的包存在
def ensure_package(package_name):
    """确保包可以被导入"""
    logger.info(f"检查包 {package_name} 是否存在...")
    
    # 检查包目录是否存在
    package_path = os.path.join(ROOT_DIR, package_name)
    if not os.path.isdir(package_path):
        logger.error(f"包目录 {package_path} 不存在!")
        return False
    
    # 确保__init__.py文件存在
    init_file = os.path.join(package_path, "__init__.py")
    if not os.path.exists(init_file):
        logger.warning(f"创建缺失的 {init_file} 文件")
        with open(init_file, "w") as f:
            f.write('"""' + package_name + ' package"""')
    
    return True

# 检查关键模块
def check_modules():
    """检查关键模块是否可以导入"""
    modules_to_check = [
        'fundamentals_llm.chat_bot',
        'fundamentals_llm.chat_bot_with_offline',
        'fundamentals_llm.fundamental_analysis',
        'fundamentals_llm.enterprise_screener'
    ]
    
    all_ok = True
    for module_name in modules_to_check:
        try:
            module = importlib.import_module(module_name)
            logger.info(f"成功导入模块 {module_name}")
        except ImportError as e:
            logger.error(f"导入模块 {module_name} 失败: {str(e)}")
            # 尝试从src导入
            try:
                module = importlib.import_module(f'src.{module_name}')
                logger.info(f"成功从src导入模块 {module_name}")
            except ImportError as e2:
                logger.error(f"导入模块 src.{module_name} 失败: {str(e2)}")
                all_ok = False
    
    return all_ok

def main():
    """主函数"""
    logger.info("启动API服务...")
    
    # 确保必要的包存在
    if not ensure_package('fundamentals_llm'):
        logger.error("缺少必要的包，无法启动API服务")
        return False
    
    if not ensure_package('scripts'):
        logger.warning("scripts包不存在或不完整，API服务可能无法正常工作")
    
    # 检查关键模块
    if not check_modules():
        logger.warning("部分模块导入失败，API服务可能无法正常工作")
    
    try:
        # 尝试导入app
        from app import app
        
        # 启动Flask应用
        app.run(host='0.0.0.0', port=5000, debug=True)
        return True
    except Exception as e:
        logger.error(f"启动API服务失败: {str(e)}")
        return False

if __name__ == "__main__":
    sys.exit(0 if main() else 1) 