/**
 * This module was automatically generated by `ts-interface-builder`
 */
import * as t from "ts-interface-checker";
// tslint:disable:object-literal-key-quotes

export const WebhookSubscribeCollection = t.iface([], {
  "webhooks": t.array("Webhook"),
});

export const Webhook = t.iface([], {
  "fields": "WebhookFields",
});

export const WebhookFields = t.iface([], {
  "url": "string",
  "eventTypes": t.array(t.union(t.lit("add"), t.lit("update"))),
  "tableId": "string",
  "enabled": t.opt("boolean"),
  "isReadyColumn": t.opt(t.union("string", "null")),
  "name": t.opt("string"),
  "memo": t.opt("string"),
});

export const WebhookBatchStatus = t.union(t.lit('success'), t.lit('failure'), t.lit('rejected'));

export const WebhookStatus = t.union(t.lit('idle'), t.lit('sending'), t.lit('retrying'), t.lit('postponed'), t.lit('error'), t.lit('invalid'));

export const WebhookSubscribe = t.iface([], {
  "url": "string",
  "eventTypes": t.array(t.union(t.lit("add"), t.lit("update"))),
  "enabled": t.opt("boolean"),
  "isReadyColumn": t.opt(t.union("string", "null")),
  "name": t.opt("string"),
  "memo": t.opt("string"),
});

export const WebhookSummaryCollection = t.iface([], {
  "webhooks": t.array("WebhookSummary"),
});

export const WebhookSummary = t.iface([], {
  "id": "string",
  "fields": t.iface([], {
    "url": "string",
    "unsubscribeKey": "string",
    "eventTypes": t.array("string"),
    "isReadyColumn": t.union("string", "null"),
    "tableId": "string",
    "enabled": "boolean",
    "name": "string",
    "memo": "string",
  }),
  "usage": t.union("WebhookUsage", "null"),
});

export const WebhookUpdate = t.iface([], {
  "id": "string",
  "fields": "WebhookPatch",
});

export const WebhookPatch = t.iface([], {
  "url": t.opt("string"),
  "eventTypes": t.opt(t.array(t.union(t.lit("add"), t.lit("update")))),
  "tableId": t.opt("string"),
  "enabled": t.opt("boolean"),
  "isReadyColumn": t.opt(t.union("string", "null")),
  "name": t.opt("string"),
  "memo": t.opt("string"),
});

export const WebhookUsage = t.iface([], {
  "numWaiting": "number",
  "status": "WebhookStatus",
  "updatedTime": t.opt(t.union("number", "null")),
  "lastSuccessTime": t.opt(t.union("number", "null")),
  "lastFailureTime": t.opt(t.union("number", "null")),
  "lastErrorMessage": t.opt(t.union("string", "null")),
  "lastHttpStatus": t.opt(t.union("number", "null")),
  "lastEventBatch": t.opt(t.union("null", t.iface([], {
    "size": "number",
    "errorMessage": t.union("string", "null"),
    "httpStatus": t.union("number", "null"),
    "status": "WebhookBatchStatus",
    "attempts": "number",
  }))),
  "numSuccess": t.opt(t.iface([], {
    "pastHour": "number",
    "past24Hours": "number",
  })),
});

const exportedTypeSuite: t.ITypeSuite = {
  WebhookSubscribeCollection,
  Webhook,
  WebhookFields,
  WebhookBatchStatus,
  WebhookStatus,
  WebhookSubscribe,
  WebhookSummaryCollection,
  WebhookSummary,
  WebhookUpdate,
  WebhookPatch,
  WebhookUsage,
};
export default exportedTypeSuite;