import * as chalk from 'chalk';
import { CliLeaf, CliUsageError } from '@alwaysai/alwayscli';
import {
  yesCliInput,
  alwaysaiUserEmailCliInput,
  alwaysaiUserPasswordCliInput
} from '../../cli-inputs';
import {
  alwaysaiUserLoginYesComponent,
  alwaysaiUserLoginPromptComponent
} from '../../components/user';
import { RequiredWithYesMessage, echo } from '../../util';
import { postTrackingDataToHubspot } from '../../infrastructure/post-tracking-data-to-hubspot';
import { CliAuthenticationClient } from '../../infrastructure';

export const userLogin = CliLeaf({
  name: 'login',
  description: 'Log in to the alwaysAI Cloud',
  namedInputs: {
    yes: yesCliInput,
    email: alwaysaiUserEmailCliInput,
    password: alwaysaiUserPasswordCliInput
  },
  async action(_, { yes, email, password }) {
    if (yes) {
      if (!email || !password) {
        throw new CliUsageError(RequiredWithYesMessage('email', 'password'));
      }
      await alwaysaiUserLoginYesComponent({
        alwaysaiUserEmail: email,
        alwaysaiUserPassword: password
      });
    } else {
      const authenticationClient = CliAuthenticationClient();
      if (authenticationClient.isSignedIn()) {
        await postTrackingDataToHubspot('activated_cli', true);
        const { email } = await authenticationClient.getInfo();
        echo(`Already logged in as ${chalk.bold(email)}`);
      } else {
        await alwaysaiUserLoginPromptComponent({
          alwaysaiUserEmail: email,
          alwaysaiUserPassword: password
        });
        await postTrackingDataToHubspot('activated_cli', true);
      }
    }
  }
});
