/**
 * This smoothes over some awkward differences between TypeORM treatment of
 * booleans and json in sqlite and postgres.  Booleans and json work fine
 * with each db, but have different levels of driver-level support.
 */

export interface NativeValues {
  // Json columns are handled natively by the postgres driver, but for
  // sqlite requires a typeorm wrapper (simple-json).
  jsonEntityType: 'json' | 'simple-json';
  jsonType: 'json' | 'varchar';
  booleanType: 'boolean' | 'integer';
  dateTimeType: 'timestamp with time zone' | 'datetime';
  trueValue: boolean | number;
  falseValue: boolean | number;
}

const sqliteNativeValues: NativeValues = {
  jsonEntityType: 'simple-json',
  jsonType: 'varchar',
  booleanType: 'integer',
  dateTimeType: 'datetime',
  trueValue: 1,
  falseValue: 0
};

const postgresNativeValues: NativeValues = {
  jsonEntityType: 'json',
  jsonType: 'json',
  booleanType: 'boolean',
  dateTimeType: 'timestamp with time zone',
  trueValue: true,
  falseValue: false
};

export const nativeValues = (process.env.TYPEORM_TYPE === 'postgres') ? postgresNativeValues : sqliteNativeValues;