export interface Environment {
  production: boolean;
  applName: string;
  defaultServer: string;
  server: {
    [key: string]: string;
  };
  ssoSite: string;
  ssoSignIn: string;
  ssoSignUp: string;
  ssoSignOut: string;
  tokenStoredInPermanentStorage: boolean;
  replaceDataToRealServer?: boolean;
}

const serverSSOAddress = 'http://atria-soft.org';

const environment_back_prod: Environment = {
  production: false,
  // URL of development API
  applName: 'karusic',
  defaultServer: 'karusic',
  server: {
    karusic: `${serverSSOAddress}/karusic/api`,
    karso: `${serverSSOAddress}/karso/api`,
  },
  ssoSite: `${serverSSOAddress}/karso/`,
  ssoSignIn: `${serverSSOAddress}/karso/signin/karusic-dev/`,
  ssoSignUp: `${serverSSOAddress}/karso/signup/karusic-dev/`,
  ssoSignOut: `${serverSSOAddress}/karso/signout/karusic-dev/`,
  tokenStoredInPermanentStorage: false,
};

const environment_local: Environment = {
  production: false,
  // URL of development API
  applName: 'karusic',
  defaultServer: 'karusic',
  server: {
    karusic: 'http://localhost:19080/karusic/api',
    karso: `${serverSSOAddress}/karso/api`,
  },
  ssoSite: `${serverSSOAddress}/karso/`,
  ssoSignIn: `${serverSSOAddress}/karso/signin/karusic-dev/`,
  ssoSignUp: `${serverSSOAddress}/karso/signup/karusic-dev/`,
  ssoSignOut: `${serverSSOAddress}/karso/signout/karusic-dev/`,
  tokenStoredInPermanentStorage: false,
  //replaceDataToRealServer: true,
};

const environment_full_local: Environment = {
  production: false,
  // URL of development API
  applName: 'karusic',
  defaultServer: 'karusic',
  server: {
    karusic: 'http://localhost:19080/karusic/api',
    karso: 'http://localhost:15080/karso/api',
  },
  ssoSite: `${serverSSOAddress}/karso/`,
  ssoSignIn: 'http://localhost:4200/signin/karusic-dev/',
  ssoSignUp: 'http://localhost:4200/signup/karusic-dev/',
  ssoSignOut: 'http://localhost:4200/signout/karusic-dev/',
  tokenStoredInPermanentStorage: false,
};

const environment_hybrid: Environment = {
  production: false,
  // URL of development API
  applName: 'karusic',
  defaultServer: 'karusic',
  server: {
    karusic: `${serverSSOAddress}/karusic/api`,
    karso: `${serverSSOAddress}/karso/api`,
  },
  ssoSite: `${serverSSOAddress}/karso/`,
  ssoSignIn: 'http://localhost:4200/signin/karusic-dev/',
  ssoSignUp: 'http://localhost:4200/signup/karusic-dev/',
  ssoSignOut: 'http://localhost:4200/signout/karusic-dev/',
  tokenStoredInPermanentStorage: false,
};

export const environment = environment_local;

/**
 * Check if the current environment is for development
 * @returns true if development is active.
 */
export const isDevelopmentEnvironment = () => {
  return import.meta.env.MODE === 'development';
};

/**
 * get the current REST api URL. Depend on the VITE_API_BASE_URL env variable.
 * @returns The URL with http(s)://***
 */
export const getApiUrl = () => {
  const baseUrl: string | undefined = import.meta.env.VITE_API_BASE_URL;
  if (baseUrl === undefined || baseUrl === null) {
    //return `${window.location.protocol}//${window.location.host}/api`;
    return environment.server.karusic;
  }
  if (baseUrl.startsWith('http')) {
    return baseUrl;
  }
  return `${window.location.protocol}//${window.location.host}/${baseUrl}`;
};
