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

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

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

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

  return `${
    date.getUTCFullYear()
  }-${
    date.getUTCMonth().toString().padStart(2, "0")
  }-${
    date.getDate().toString().padStart(2, "0")
  }`;
}

export const DateScalar = createScalar(
  "date", "date (no time of day)", {
    string ( value, invalid ) {
      if (allowed[value.toLowerCase()]) { return value; }

      return asDate(value, invalid);
    },
    number: asDate,
  }
  // serialized as YYYY-MM-DD
);
