import random
import os
from ObjectiveC.oc_custom import custom_util
from ObjectiveC import oc_util


def _batch_mode():
    """是否处于批处理模式（服务端调用，无交互）"""
    return os.environ.get('OC_BATCH_MODE') == '1'


def _batch_input(env_name, prompt, validator=None, default=''):
    """批处理模式下从环境变量读取，交互模式下用 input()"""
    if _batch_mode():
        value = os.environ.get(env_name, default).strip()
        print(f"[批处理] {env_name}={value}")
        return value
    return input(prompt).strip()


def get_params():

    # 国内还是国外 1国内 2海外 #########################################################
    while True:
        sdk_cn_or_os = _batch_input(
            'OC_SDK_REGION',
            "请输入需要国内还是海外\n1.国内\n2.海外\n\n",
            default='2'
        )
        if sdk_cn_or_os == '':
            custom_util.sdk_cn_or_os = '2'
            sdk_cn_or_os = '2'
            break
        elif sdk_cn_or_os in ('1', '2'):
            custom_util.sdk_cn_or_os = sdk_cn_or_os
            break
        else:
            print("输入无效，请输入1或2")
            if _batch_mode():
                raise ValueError(f"OC_SDK_REGION 无效值: {sdk_cn_or_os}")

    # 自动检测工程名
    print(f'当前工程名: {oc_util.name_current_project}')
    if oc_util.name_current_project != 'XXGPlayKit':
        return

    # 自动生成新工程名（批处理模式下可通过 OC_NEW_PROJECT_NAME 指定）
    override_name = os.environ.get('OC_NEW_PROJECT_NAME', '').strip() if _batch_mode() else ''
    if override_name:
        name = override_name
    else:
        name = ''
        for _ in range(random.randint(1, 1)):
            name = name + random.choice(oc_util.list_random_words).capitalize()
            name = name + random.choice(oc_util.list_random_words).capitalize()
    oc_util.new_project_name = name
    print(f'新工程名: {name}')

    # 请输入初始化id #########################################################
    while True:
        startid = _batch_input(
            'OC_STARTID',
            "请输入初始化id(可为空)\n",
            default=''
        )
        if startid == '':
            custom_util.startid = ''
            break
        elif len(startid) == 32:
            custom_util.startid = startid
            break
        else:
            print("输入无效，请输入32位的初始化id或留空")
            if _batch_mode():
                raise ValueError(f"OC_STARTID 无效值: {startid}")

    # 根据国内/海外选择添加SDK选项 #########################################################
    sdk_options = ""

    # 定义SDK列表和默认值
    if sdk_cn_or_os == '1':  # 国内
        sdk_list = [
            'ShanYanSDK(一键登录)', 'BDASignalManager(巨量归因)', 'CSJ(激励广告)', 'ShareSDK(分享)']
        default_sdk = 'ShanYanSDK,BDASignalManager'
    elif sdk_cn_or_os == '2':  # 海外
        sdk_list = ['AppsFlyer', 'Facebook', 'Firebase', 'Adjust',
                    'VK(俄罗斯VK登录)', 'AppLovin(Max广告)', 'Poopo(渠道)', 'ADP(IAA项目)']
        default_sdk = 'AppsFlyer,Facebook,Firebase'

    # 生成选择提示
    sdk_options_prompt = "请选择需要包含的SDK（多选请用逗号分隔，如：0,1）\n"
    for i, sdk in enumerate(sdk_list):
        sdk_options_prompt += f"{i}.{sdk}\n"
    sdk_options_prompt += "\n"

    # 获取用户输入（批处理模式下支持两种形式：下标列表 "0,1" 或 名称列表 "ShanYanSDK,BDASignalManager"）
    sdk_options = _batch_input('OC_SDK_OPTIONS', sdk_options_prompt, default='')

    # 处理用户输入
    if sdk_options == '':
        # 输入为空，使用默认值
        sdk_options = default_sdk
        print(f"默认选择: {sdk_options}")
    else:
        # 判断输入是下标还是名称
        tokens = [t.strip() for t in sdk_options.split(',') if t.strip()]
        if tokens and all(t.isdigit() for t in tokens):
            # 下标形式
            try:
                selected_indices = [int(idx) for idx in tokens]
                selected_sdks = [sdk_list[idx]
                                 for idx in selected_indices if 0 <= idx < len(sdk_list)]
                if not selected_sdks:
                    sdk_options = default_sdk
                    print(f"无有效选择，默认选择: {sdk_options}")
                else:
                    sdk_options = ','.join(selected_sdks)
                    print(f"已选择: {sdk_options}")
            except (ValueError, IndexError):
                sdk_options = default_sdk
                print(f"输入格式有误，默认选择: {sdk_options}")
        else:
            # 名称形式（批处理模式下前端直接传名称），按 sdk_list 校验匹配
            # 支持带"(说明)"或不带说明的名称匹配
            valid_names = []
            for t in tokens:
                for sdk in sdk_list:
                    sdk_base = sdk.split('(')[0]
                    if t == sdk or t == sdk_base:
                        valid_names.append(sdk)
                        break
            if valid_names:
                sdk_options = ','.join(valid_names)
                print(f"已选择: {sdk_options}")
            else:
                sdk_options = default_sdk
                print(f"无有效选择，默认选择: {sdk_options}")

    custom_util.sdk_options = sdk_options

    # 检查是否包含AppLovin，如果包含则设置need_pods为True
    if 'AppLovin' in sdk_options:
        custom_util.need_pods = True
    else:
        custom_util.need_pods = False
