"""
估值分析模块命令行工具
"""

import argparse
import logging
import datetime
import json
import sys
import os

from . import pe_pb_analysis
from . import industry_analysis
from . import rzrq_collector
from .config import OUTPUT_DIR

def main():
    """命令行工具主函数"""
    
    parser = argparse.ArgumentParser(description='股票估值分析工具', formatter_class=argparse.RawTextHelpFormatter)
    subparsers = parser.add_subparsers(dest='command', help='子命令')
    
    # 设置PE/PB分析子命令
    pepb_parser = subparsers.add_parser('pepb', help='PE/PB分析')
    pepb_parser.add_argument('--stock', '-s', required=True, help='股票代码')
    pepb_parser.add_argument('--days', '-d', type=int, default=1000, help='分析天数 (默认: 1000)')
    pepb_parser.add_argument('--output', '-o', choices=['json', 'csv', 'all'], default='json', 
                             help='输出格式 (默认: json)')
    
    # 设置ROE分析子命令
    roe_parser = subparsers.add_parser('roe', help='ROE分析')
    roe_parser.add_argument('--stock', '-s', required=True, help='股票代码')
    roe_parser.add_argument('--output', '-o', choices=['json', 'csv', 'all'], default='json',
                           help='输出格式 (默认: json)')
    
    # 设置行业分析子命令
    industry_parser = subparsers.add_parser('industry', help='行业估值分析')
    industry_parser.add_argument('--name', '-n', required=True, help='行业名称')
    industry_parser.add_argument('--metric', '-m', choices=['pe', 'pb', 'ps'], default='pe',
                               help='估值指标 (pe/pb/ps) (默认: pe)')
    industry_parser.add_argument('--days', '-d', type=int, default=1095, 
                               help='分析天数 (默认: 1095，约3年)')
    industry_parser.add_argument('--output', '-o', choices=['json', 'csv', 'all'], default='json',
                               help='输出格式 (默认: json)')
    
    # 设置行业列表子命令
    industry_list_parser = subparsers.add_parser('industry-list', help='获取行业列表')
    
    # 设置融资融券数据采集子命令
    rzrq_parser = subparsers.add_parser('rzrq', help='融资融券数据采集')
    rzrq_parser.add_argument('--action', '-a', choices=['init', 'update', 'run-scheduler'], 
                           required=True, help='操作类型: init-首次全量采集，update-更新最新数据，run-scheduler-运行定时器')
    rzrq_parser.add_argument('--output-sql', '-s', action='store_true', 
                           help='输出创建表的SQL语句，仅与init配合使用')
    
    # 解析命令行参数
    args = parser.parse_args()
    
    # 如果没有提供子命令，显示帮助信息
    if not args.command:
        parser.print_help()
        sys.exit(1)
    
    # 执行对应的子命令
    if args.command == 'pepb':
        # PE/PB分析
        start_date = (datetime.datetime.now() - datetime.timedelta(days=args.days)).strftime('%Y-%m-%d')
        end_date = datetime.datetime.now().strftime('%Y-%m-%d')
        
        analyzer = pe_pb_analysis.StockValuationAnalyzer()
        result = analyzer.get_stock_pe_pb_analysis(args.stock, start_date, end_date)
        
        if result["success"]:
            # 输出结果
            if args.output in ['json', 'all']:
                output_file = os.path.join(OUTPUT_DIR, f"{args.stock}_pepb_analysis.json")
                with open(output_file, 'w', encoding='utf-8') as f:
                    json.dump(result, f, ensure_ascii=False, indent=2)
                print(f"结果已保存到: {output_file}")
                
            if args.output in ['csv', 'all']:
                # 这里可以添加CSV输出逻辑
                pass
                
            # 打印简要结果
            print(f"\n{args.stock} PE/PB分析结果:")
            print(f"当前PE: {result['pe']['current']:.2f}, 百分位: {result['pe']['percentile']:.2f}%")
            print(f"当前PB: {result['pb']['current']:.2f}, 百分位: {result['pb']['percentile']:.2f}%")
        else:
            print(f"分析失败: {result['message']}")
    
    elif args.command == 'roe':
        # ROE分析
        analyzer = pe_pb_analysis.StockValuationAnalyzer()
        result = analyzer.get_stock_roe_analysis(args.stock)
        
        if result["success"]:
            # 输出结果
            if args.output in ['json', 'all']:
                output_file = os.path.join(OUTPUT_DIR, f"{args.stock}_roe_analysis.json")
                with open(output_file, 'w', encoding='utf-8') as f:
                    json.dump(result, f, ensure_ascii=False, indent=2)
                print(f"结果已保存到: {output_file}")
                
            # 打印简要结果
            print(f"\n{args.stock} ROE分析结果:")
            print(f"最新ROE: {result['latest_roe']:.2f}%")
            print(f"5年平均ROE: {result['avg_5year_roe']:.2f}%")
        else:
            print(f"分析失败: {result['message']}")
    
    elif args.command == 'industry':
        # 行业估值分析
        start_date = (datetime.datetime.now() - datetime.timedelta(days=args.days)).strftime('%Y-%m-%d')
        
        analyzer = industry_analysis.IndustryAnalyzer()
        result = analyzer.get_industry_analysis(args.name, args.metric, start_date)
        
        if result["success"]:
            # 输出结果
            if args.output in ['json', 'all']:
                output_file = os.path.join(OUTPUT_DIR, f"{args.name}_{args.metric}_analysis.json")
                with open(output_file, 'w', encoding='utf-8') as f:
                    json.dump(result, f, ensure_ascii=False, indent=2)
                print(f"结果已保存到: {output_file}")
                
            # 打印简要结果
            print(f"\n{args.name} {args.metric.upper()}分析结果:")
            current = result['valuation']['percentiles']['current']
            percentile = result['valuation']['percentiles']['percentile']
            print(f"当前{args.metric.upper()}: {current:.2f}, 百分位: {percentile:.2f}%")
            if "crowding" in result:
                crowding_level = result['crowding']['current']['level']
                crowding_percentile = result['crowding']['current']['percentile']
                print(f"行业拥挤度: {crowding_level} ({crowding_percentile:.2f}%)")
        else:
            print(f"分析失败: {result['message']}")
    
    elif args.command == 'industry-list':
        # 获取行业列表
        analyzer = industry_analysis.IndustryAnalyzer()
        industry_list = analyzer.get_industry_list()
        
        if industry_list:
            for i, industry in enumerate(industry_list, 1):
                print(f"{i}. {industry['name']} ({industry['code']})")
        else:
            print("获取行业列表失败")
            
    elif args.command == 'rzrq':
        # 融资融券数据采集
        collector = rzrq_collector.RzrqCollector()
        
        if args.action == 'init':
            # 输出建表SQL
            if args.output_sql:
                print("创建融资融券数据表的SQL语句:")
                print(rzrq_collector.get_create_table_sql())
                print("\n")
            
            # 首次全量采集
            print("开始首次全量采集融资融券数据...")
            result = collector.initial_data_collection()
            if result:
                print("融资融券数据采集完成")
            else:
                print("融资融券数据采集失败")
                
        elif args.action == 'update':
            # 更新最新数据
            print("开始更新最新融资融券数据...")
            result = collector.update_latest_data()
            if result:
                print("融资融券数据更新完成")
            else:
                print("融资融券数据更新失败")
                
        elif args.action == 'run-scheduler':
            # 运行定时器
            print("启动融资融券数据采集定时器，将在每天下午17:00自动更新...")
            print("按Ctrl+C终止")
            collector.schedule_daily_update()

if __name__ == "__main__":
    main() 