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

export const defaultPgDbParams = {
    databaseType: 1, // Postgres
    hostAddress: "localhost",
    portNumber: "5432",
    username: "postgres",
    password: "password",
    databaseName: "postgres",
};

// 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,
    },
    pgExternalREST: {
        basic: { dbType: "external", apiType: "REST", name: "pgExternalREST" },
        config: defaultPgDbParams,
    },
    pgExternalGQL: {
        basic: { dbType: "external", apiType: "GQL", name: "pgExternalGQL" },
        config: defaultPgDbParams,
    },
};

// return TRUE if test suite specified is activated from env-variables
//
export const isTestSuiteActive = (apiType, dbType) => {
    const env = Cypress.env("testMode");
    return env.some(
        (element) => element.apiType === apiType && element.dbType === dbType
    );
};

let currentTestMode = { apiType: null, dbType: null };
let xcdbProjectString = ``;
export function setCurrentMode(apiType, dbType) {
    currentTestMode = { apiType: apiType, dbType: dbType };
}

export function getCurrentMode() {
    return currentTestMode;
}

export function isXcdb() {
    return currentTestMode.dbType === "xcdb";
}

export function isPostgres() {
    return currentTestMode.dbType === "postgres";
}

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

export function getProjectString() {
    return xcdbProjectString;
}
