#!/usr/bin/env python3
# 修复模块导入问题的脚本

import os
import sys
from pathlib import Path

def check_project_structure():
    """检查项目结构"""
    print("=== 检查项目结构 ===")

    current_dir = Path.cwd()
    print(f"当前目录: {current_dir}")

    # 检查app目录
    app_dir = current_dir / 'app'
    if app_dir.exists():
        print("✓ app目录存在")
    else:
        print("✗ app目录不存在")
        return False

    # 检查app/core目录
    core_dir = app_dir / 'core'
    if core_dir.exists():
        print("✓ app/core目录存在")
    else:
        print("✗ app/core目录不存在")
        return False

    # 检查关键文件
    key_files = [
        'app/__init__.py',
        'app/core/__init__.py',
        'app/core/config.py',
        'main.py'
    ]

    for file_path in key_files:
        if (current_dir / file_path).exists():
            print(f"✓ {file_path} 存在")
        else:
            print(f"✗ {file_path} 不存在")
            return False

    return True

def create_missing_files():
    """创建缺失的文件"""
    print("\n=== 创建缺失文件 ===")

    current_dir = Path.cwd()

    # 创建app/__init__.py
    app_init = current_dir / 'app' / '__init__.py'
    if not app_init.exists():
        with open(app_init, 'w') as f:
            f.write('"""云盘应用包"""\n')
        print("✓ 创建 app/__init__.py")

    # 创建app/core/__init__.py
    core_init = current_dir / 'app' / 'core' / '__init__.py'
    if not core_init.exists():
        with open(core_init, 'w') as f:
            f.write('"""核心模块包"""\n')
        print("✓ 创建 app/core/__init__.py")

    # 创建app/core/config.py（如果不存在）
    config_file = current_dir / 'app' / 'core' / 'config.py'
    if not config_file.exists():
        config_content = '''from pydantic_settings import BaseSettings
from typing import List
import os

class Settings(BaseSettings):
    # 基础配置
    ENVIRONMENT: str = "development"
    DEBUG: bool = True

    # 数据库配置
    DATABASE_URL: str = "mysql+pymysql://mytest_db:mytest_db@101.126.85.76:3306/mytest_db"

    # Redis配置
    REDIS_URL: str = "redis://localhost:6379"

    # JWT配置
    JWT_SECRET_KEY: str = "your-super-secret-jwt-key-change-in-production"
    JWT_ALGORITHM: str = "HS256"
    JWT_EXPIRE_MINUTES: int = 30
    JWT_REFRESH_EXPIRE_DAYS: int = 7

    # CORS配置
    ALLOWED_HOSTS: List[str] = [
        "http://localhost:3000",
        "http://localhost:3001",
        "http://localhost:3002",
        "http://localhost:3003",
        "http://localhost:3004",
        "http://127.0.0.1:3000",
        "http://127.0.0.1:3001",
        "http://127.0.0.1:3002",
        "http://127.0.0.1:3003",
        "http://127.0.0.1:3004",
        "http://172.16.16.89:3000",
        "http://172.16.16.89:3001",
        "http://172.16.16.89:3002",
        "http://172.16.16.89:3003",
        "http://172.16.16.89:3004",
        "*"
    ]

    # 文件上传配置
    MAX_FILE_SIZE: int = 10 * 1024 * 1024  # 10MB
    UPLOAD_DIR: str = "uploads"
    ALLOWED_EXTENSIONS: List[str] = [
        # 图片
        ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp", ".svg",
        # 文档
        ".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx",
        ".txt", ".rtf", ".csv",
        # 压缩文件
        ".zip", ".rar", ".7z", ".tar", ".gz",
        # 音频
        ".mp3", ".wav", ".flac", ".aac", ".ogg",
        # 视频
        ".mp4", ".avi", ".mkv", ".mov", ".wmv", ".flv",
        # 代码文件
        ".py", ".js", ".html", ".css", ".json", ".xml", ".yaml", ".yml",
        ".java", ".cpp", ".c", ".h", ".cs", ".php", ".rb", ".go",
        ".sql", ".sh", ".bat", ".ps1", ".md", ".log"
    ]

    # 安全配置
    BCRYPT_ROUNDS: int = 12

    class Config:
        env_file = ".env"
        case_sensitive = True

settings = Settings()
'''
        with open(config_file, 'w') as f:
            f.write(config_content)
        print("✓ 创建 app/core/config.py")

def create_fixed_main_py():
    """创建修复版main.py"""
    current_dir = Path.cwd()
    main_file = current_dir / 'main.py'

    fixed_content = '''#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
云盘后端应用主入口
"""

import os
import sys
from pathlib import Path

# 确保项目根目录在Python路径中
current_dir = Path(__file__).parent
if str(current_dir) not in sys.path:
    sys.path.insert(0, str(current_dir))

try:
    from fastapi import FastAPI
    from fastapi.middleware.cors import CORSMiddleware
    from app.core.config import settings
    from app.api.v1.endpoints import health, auth, files
    import uvicorn
    from datetime import datetime

    # 简单的日志打印函数
    def log_info(message):
        """打印INFO级别日志"""
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"[{timestamp}] INFO: {message}")

    def log_error(message):
        """打印ERROR级别日志"""
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"[{timestamp}] ERROR: {message}")

    def log_debug(message):
        """打印DEBUG级别日志"""
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"[{timestamp}] DEBUG: {message}")

    # 确保logs目录存在
    logs_dir = current_dir / "logs"
    logs_dir.mkdir(exist_ok=True)

    log_info("=== Server Starting ===")
    log_info(f"Python version: {sys.version}")
    log_info(f"Working directory: {os.getcwd()}")
    log_info("Simple print logger configured")

    app = FastAPI(
        title="云盘应用 API",
        description="现代化的云存储Web应用后端API",
        version="1.0.0",
        docs_url="/docs",
        redoc_url="/redoc"
    )

    # CORS中间件
    app.add_middleware(
        CORSMiddleware,
        allow_origins=settings.ALLOWED_HOSTS,
        allow_credentials=True,
        allow_methods=["*"],
        allow_headers=["*"],
    )

    # 包含路由
    app.include_router(health.router, prefix="/api/v1", tags=["health"])
    app.include_router(auth.router, prefix="/api/v1/auth", tags=["authentication"])
    app.include_router(files.router, prefix="/api/v1/files", tags=["files"])

    @app.get("/")
    async def root():
        return {"message": "云盘应用 API", "version": "1.0.1"}

    if __name__ == "__main__":
        uvicorn.run(
            "main:app",
            host="0.0.0.0",
            port=8000,
            reload=True if settings.ENVIRONMENT == "development" else False
        )

except ImportError as e:
    print(f"导入错误: {e}")
    print("请确保已安装所有依赖: pip install -r requirements.txt")
    print("或尝试安装基础依赖: pip install fastapi uvicorn sqlalchemy pymysql redis python-jose passlib python-multipart pydantic pydantic-settings httpx python-dotenv")
    sys.exit(1)
except Exception as e:
    print(f"启动错误: {e}")
    sys.exit(1)
'''

    with open(main_file, 'w') as f:
        f.write(fixed_content)
    print("✓ 创建修复版 main.py")

def main():
    """主函数"""
    print("=== 修复模块导入问题 ===")

    # 检查项目结构
    if not check_project_structure():
        print("\\n项目结构有问题，开始修复...")
        create_missing_files()
        create_fixed_main_py()

    print("\\n=== 修复完成 ===")
    print("现在可以运行:")
    print("1. 激活虚拟环境: source venv/bin/activate")
    print("2. 安装依赖: pip install -r requirements.txt")
    print("3. 启动服务: python main.py")

if __name__ == '__main__':
    main()