#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
处理训练请求，预览训练参数
"""

import argparse
import requests
from datetime import datetime

# API基础地址
API_BASE_URL = "http://47.96.16.84:5005"


def get_time_range():
    """
    获取数据的时间范围
    """
    url = f"{API_BASE_URL}/api/load-forecast/data/date-range"
    try:
        response = requests.get(url)
        response.raise_for_status()
        data = response.json()
        if data.get('code') == 200:
            return data['data']
        else:
            print(f"获取时间范围失败: {data.get('error')}")
            return None
    except Exception as e:
        print(f"获取时间范围异常: {e}")
        return None


def preview_training_params(learning_rate=0.001, batch_size=32, max_epochs=100, window_size=96, hidden_size=128, num_layers=2, split_ratio='811'):
    """
    预览训练参数
    """
    # 获取时间范围
    time_range = get_time_range()
    if not time_range:
        # 使用默认时间范围
        start_time = "2024-01-01 00:00:00"
        end_time = "2025-12-31 23:45:00"
    else:
        start_time = time_range['start_time']
        end_time = time_range['end_time']
    
    # 构建参数字符串
    params = [
        f"learning_rate={learning_rate}",
        f"batch_size={batch_size}",
        f"max_epochs={max_epochs}",
        f"window_size={window_size}",
        f"hidden_size={hidden_size}",
        f"num_layers={num_layers}",
        f"split_ratio={split_ratio}",
        f"start_time={start_time}",
        f"end_time={end_time}"
    ]
    
    # 生成参数确认字符串
    param_str = "&**&" + "|".join(params) + "&**&"
    print(param_str)
    
    return param_str


def main():
    parser = argparse.ArgumentParser(description='处理训练请求，预览训练参数')
    parser.add_argument('--learning_rate', type=float, default=0.001, help='学习率')
    parser.add_argument('--batch_size', type=int, default=32, help='批大小')
    parser.add_argument('--max_epochs', type=int, default=100, help='最大训练轮次')
    parser.add_argument('--window_size', type=int, default=96, help='窗口大小')
    parser.add_argument('--hidden_size', type=int, default=128, help='隐藏层大小')
    parser.add_argument('--num_layers', type=int, default=2, help='层数')
    parser.add_argument('--split_ratio', type=str, default='811', help='数据分割比例')
    
    args = parser.parse_args()
    
    preview_training_params(
        learning_rate=args.learning_rate,
        batch_size=args.batch_size,
        max_epochs=args.max_epochs,
        window_size=args.window_size,
        hidden_size=args.hidden_size,
        num_layers=args.num_layers,
        split_ratio=args.split_ratio
    )


if __name__ == '__main__':
    main()