#!/usr/bin/env python3
"""
Schema-Refiner工具套件 - View Generator CLI
视图生成与元数据记录工具

该CLI工具接收审计报告和模式图谱，基于确定性规则生成CREATE VIEW语句，
并同时产出用于下游重写的Transformation-Log。
"""

import sys
import os
import argparse
import logging
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))

from schema_refiner.tools import view_generator_cli
from schema_refiner.core.logging import setup_logging, get_logger
from schema_refiner.core.exceptions import (
    ConfigurationError, InputFileError, OutputFileError, ValidationError
)

def create_argument_parser():
    """创建命令行参数解析器"""
    parser = argparse.ArgumentParser(
        description="视图生成与元数据记录工具 - 生成CREATE VIEW语句和转换日志",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
示例用法:
  view-generator --audit-report ./outputs/audit_report.json \\
                 --schema-graph ./outputs/schema_graph.json \\
                 --output-dir ./outputs \\
                 --db-name academic

输出文件:
  - refinement_scripts.sql: 包含所有CREATE VIEW语句的SQL脚本
  - transformation_log.json: 转换日志JSON文件
        """
    )
    
    # 必需参数
    parser.add_argument(
        '--audit-report',
        required=True,
        help='审计报告JSON文件路径（必需）'
    )
    
    parser.add_argument(
        '--schema-graph', 
        required=True,
        help='原始模式图谱JSON文件路径（必需）'
    )
    
    # 可选参数
    parser.add_argument(
        '--output-dir',
        default='./outputs',
        help='输出目录路径（默认：./outputs）'
    )
    
    parser.add_argument(
        '--db-name',
        help='数据库名称（用于生成Transformation-Log，可选）'
    )
    
    parser.add_argument(
        '--verbose', '-v',
        action='store_true',
        help='启用详细输出模式'
    )
    
    parser.add_argument(
        '--log-level',
        choices=['DEBUG', 'INFO', 'WARNING', 'ERROR'],
        default='INFO',
        help='设置日志级别（默认：INFO）'
    )
    
    return parser

def main():
    """主函数"""
    parser = create_argument_parser()
    args = parser.parse_args()
    
    # 设置日志
    log_level_name = "DEBUG" if args.verbose else args.log_level
    setup_logging(
        log_level=log_level_name,
        log_file=os.path.join(args.output_dir, 'view_generator.log')
    )
    logger = get_logger('view-generator')
    
    try:
        logger.info("启动View Generator CLI工具")
        logger.info(f"参数: {vars(args)}")
        
        # 调用CLI处理逻辑
        exit_code = view_generator_cli.main(
            audit_report_path=args.audit_report,
            schema_graph_path=args.schema_graph,
            output_dir=args.output_dir,
            db_name=args.db_name,
            logger=logger
        )
        
        if exit_code == 0:
            logger.info("View Generator CLI工具执行完成")
        else:
            logger.error(f"View Generator CLI工具执行失败，退出码: {exit_code}")
            
        sys.exit(exit_code)
        
    except ConfigurationError as e:
        logger.error(f"配置错误: {e}")
        sys.exit(1)
    except InputFileError as e:
        logger.error(f"输入文件错误: {e}")
        sys.exit(2)
    except OutputFileError as e:
        logger.error(f"输出文件错误: {e}")
        sys.exit(4)
    except ValidationError as e:
        logger.error(f"验证错误: {e}")
        sys.exit(2)
    except Exception as e:
        logger.error(f"未预期的错误: {e}", exc_info=True)
        sys.exit(5)

if __name__ == '__main__':
    main()