import { getCookieTokenName } from '../services/users';

const {
  validateBasicSignUpForm,
} = require("../../helpers/form-validations");
const { setCookie } = require("../services/tokens");
import { Response } from "express";
/**
 * Validate the sign up form
 *
 * @param {object} payload - the HTTP body message
 * @returns {object} The result of validation. Object contains a boolean validation result,
 *                   errors tips, and a global message for the whole form.
 */
export function validateSignUpForm(payload: any) {
  const errors = validateBasicSignUpForm(payload);

  if (
    !payload ||
    typeof payload.firstName !== "string" ||
    !/^[a-zA-Z]+([\-\s]?[a-zA-Z]+)*$/.test(payload.firstName.trim())
  ) {
    errors.firstName = {
      code: "INVALID_NAME",
    };
  }

  if (
    !payload ||
    typeof payload.password !== "string" ||
    payload.password.trim().length < 8
  ) {
    errors.password = {
      code: "INVALID_PASSWORD",
    };
  }

  return errors;
}

/**
 * Validate the login form
 *
 * @param {object} payload - the HTTP body message
 * @returns {object} The result of validation. Object contains a boolean validation result,
 *                   errors tips, and a global message for the whole form.
 */
export function validateSignInForm(payload: any) {
  const errors: any = {};

  if (
    !payload ||
    typeof payload.password !== "string" ||
    payload.password.trim().length === 0
  ) {
    errors.password = {
      code: "EMPTY_PASSWORD",
    };
  }

  return errors;
}

export function tokenPayload(host: string, res: Response, data: any) {
  const { tenant, token, refreshToken, cookieToken, user, workspace } = data;

  if (cookieToken) {
    res = setCookie(res, getCookieTokenName(tenant), cookieToken, null, host);
    return res
      .status(200)
      .json({
        payload: { user, workspace },
      })
      .end();
  } else {
    return res
      .status(200)
      .json({
        payload: {
          token,
          refreshToken,
          user,
          workspace: workspace && {
            _id: workspace._id,
            name: workspace.name,
            roles: workspace.roles,
            labels: workspace.labels
          }
        },
      })
      .end();
  }
}
