
import { createScalar } from "../utilities";

const allowed: Record<string, true> = {
  epoch      : true,
  infinity   : true,
  "-infinity": true,
  now        : true,
  today      : true,
  tomorrow   : true,
  yesterday  : true,
};

function asTstz ( value: number | string, invalid: createScalar.Invalid ) {
  const date = new Date(value);

  if (isNaN(date.valueOf())) { return invalid(); }

  return date.toISOString();
}

export const TstzScalar = createScalar(
  "tstz", "timestamp with time zone", {
    string ( value, invalid ) {
      if (allowed[value.toLowerCase()]) { return value; }

      return asTstz(value, invalid);
    },
    number: asTstz,
  }
);
