1eeffdb10STomasz Sapetaimport chalk from 'chalk';
2eeffdb10STomasz Sapetaimport inquirer from 'inquirer';
3*a272999eSBartosz Kaszubowskiimport semver from 'semver';
4eeffdb10STomasz Sapeta
5eeffdb10STomasz Sapetaimport { Platform, getSDKVersionsAsync } from '../ProjectVersions';
6eeffdb10STomasz Sapeta
7eeffdb10STomasz Sapetaexport default async function askForSDKVersionAsync(
8eeffdb10STomasz Sapeta  platform: Platform,
9eeffdb10STomasz Sapeta  defaultSdkVersion?: string
10eeffdb10STomasz Sapeta) {
11eeffdb10STomasz Sapeta  const sdkVersions = await getSDKVersionsAsync(platform);
12eeffdb10STomasz Sapeta
13eeffdb10STomasz Sapeta  if (process.env.CI) {
14eeffdb10STomasz Sapeta    if (defaultSdkVersion) {
15eeffdb10STomasz Sapeta      console.log(
16eeffdb10STomasz Sapeta        `${chalk.red('`--sdkVersion`')} not provided - defaulting to ${chalk.cyan(
17eeffdb10STomasz Sapeta          defaultSdkVersion
18eeffdb10STomasz Sapeta        )}.`
19eeffdb10STomasz Sapeta      );
20eeffdb10STomasz Sapeta      return defaultSdkVersion;
21eeffdb10STomasz Sapeta    }
22eeffdb10STomasz Sapeta    throw new Error(
23eeffdb10STomasz Sapeta      `${chalk.red('`--sdkVersion`')} not provided and unable to obtain default value.`
24eeffdb10STomasz Sapeta    );
25eeffdb10STomasz Sapeta  }
26eeffdb10STomasz Sapeta
27eeffdb10STomasz Sapeta  const defaultValue =
28eeffdb10STomasz Sapeta    defaultSdkVersion && sdkVersions.includes(defaultSdkVersion)
29eeffdb10STomasz Sapeta      ? defaultSdkVersion
30eeffdb10STomasz Sapeta      : sdkVersions[sdkVersions.length - 1];
31eeffdb10STomasz Sapeta  const { sdkVersion } = await inquirer.prompt<{ sdkVersion: string }>([
32eeffdb10STomasz Sapeta    {
33eeffdb10STomasz Sapeta      type: 'list',
34eeffdb10STomasz Sapeta      name: 'sdkVersion',
35eeffdb10STomasz Sapeta      message: 'What is the SDK version that you want to run this script against?',
36eeffdb10STomasz Sapeta      default: defaultValue,
37eeffdb10STomasz Sapeta      choices: sdkVersions,
38eeffdb10STomasz Sapeta      validate(value) {
39eeffdb10STomasz Sapeta        if (!semver.valid(value)) {
40eeffdb10STomasz Sapeta          return `Invalid version: ${chalk.cyan(value)}`;
41eeffdb10STomasz Sapeta        }
42eeffdb10STomasz Sapeta        return true;
43eeffdb10STomasz Sapeta      },
44eeffdb10STomasz Sapeta    },
45eeffdb10STomasz Sapeta  ]);
46eeffdb10STomasz Sapeta  return sdkVersion;
47eeffdb10STomasz Sapeta}
48