export const defaultDbParams = {
  databaseType: 0, // MySQL
  hostAddress: "localhost",
  portNumber: "3306",
  username: "root",
  password: "password",
  databaseName: "sakila",
};

// database
//      validation details
//          advSettings: left navigation bar (audit, metadata, auth, transient view modes)
//          editSchema: create table, add/update/delete column
//          editData: add/ update/ delete row, cell contents
//          editComment: add comment
//          shareView: right navigation bar (share options)
export const roles = {
  owner: {
    name: "owner",
    credentials: { username: "user@nocodb.com", password: "Password123." },
    validations: {
      advSettings: true,
      editSchema: true,
      editData: true,
      editComment: true,
      shareView: true,
    },
  },
  creator: {
    name: "creator",
    credentials: { username: "creator@nocodb.com", password: "Password123." },
    validations: {
      advSettings: true,
      editSchema: true,
      editData: true,
      editComment: true,
      shareView: true,
    },
  },
  editor: {
    name: "editor",
    credentials: { username: "editor@nocodb.com", password: "Password123." },
    validations: {
      advSettings: false,
      editSchema: false,
      editData: true,
      editComment: true,
      shareView: false,
    },
  },
  commenter: {
    name: "commenter",
    credentials: { username: "commenter@nocodb.com", password: "Password123." },
    validations: {
      advSettings: false,
      editSchema: false,
      editData: false,
      editComment: true,
      shareView: false,
    },
  },
  viewer: {
    name: "viewer",
    credentials: { username: "viewer@nocodb.com", password: "Password123." },
    validations: {
      advSettings: false,
      editSchema: false,
      editData: false,
      editComment: false,
      shareView: false,
    },
  },
};

// default projects
//
export const staticProjects = {
  sampleREST: {
    basic: { dbType: "none", apiType: "REST", name: "sampleREST" },
    config: {},
  },
  sampleGQL: {
    basic: { dbType: "none", apiType: "GQL", name: "sampleGQL" },
    config: {},
  },
  externalREST: {
    basic: { dbType: "external", apiType: "REST", name: "externalREST" },
    config: defaultDbParams,
  },
  externalGQL: {
    basic: { dbType: "external", apiType: "GQL", name: "externalGQL" },
    config: defaultDbParams,
  },
};

// return TRUE if test suite specified is activated from env-variables
//
export const isTestSuiteActive = (type, xcdb) => {
  const env = Cypress.env("testMode");
  if (!xcdb) {
    switch (type) {
      case "rest":
        return env.includes("extREST") ? true : false;
      case "graphql":
        return env.includes("extGQL") ? true : false;
    }
  } else {
    switch (type) {
      case "rest":
        return env.includes("xcdbREST") ? true : false;
      case "graphql":
        return env.includes("xcdbGQL") ? true : false;
    }
  }
};

// expecting different modes to be seperated by a .
export const getPrimarySuite = () => {
  const env = Cypress.env("testMode").split(".");
  switch (env[0]) {
    case "extREST":
      return staticProjects.externalREST;
    case "extGQL":
      return staticProjects.externalGQL;
    case "xcdbREST":
      return staticProjects.sampleREST;
    case "xcdbGQL":
      return staticProjects.sampleGQL;
  }
};

export const isSecondarySuite = (proj, xcdb) => {
  if (!isTestSuiteActive(proj, xcdb)) return false;

  const env = Cypress.env("testMode").split(".");

  switch (env[0]) {
    case "extREST":
      return proj == "rest" && !xcdb ? false : true;
    case "extGQL":
      return proj == "graphql" && !xcdb ? false : true;
    case "xcdbREST":
      return proj == "rest" && xcdb ? false : true;
    case "xcdbGQL":
      return proj == "graphql" && xcdb ? false : true;
  }
};

let currentTestMode = ``;
let xcdbProjectString = ``;
export function setCurrentMode(proj, xcdb) {
  if (!xcdb) {
    if (proj == "rest") currentTestMode = "extREST";
    else currentTestMode = "extGQL";
  } else {
    if (proj == "rest") currentTestMode = "xcdbREST";
    else currentTestMode = "xcdbGQL";
  }
}

export function getCurrentMode() {
  return currentTestMode;
}

export function isXcdb() {
  if (currentTestMode === "xcdbREST" || currentTestMode === "xcdbGQL")
    return true;
  return false;
}

export function setProjectString(projStr) {
  xcdbProjectString = projStr;
}

export function getProjectString() {
  return xcdbProjectString;
}
