export type KavenixStatisticsRange = 7 | 30 | 90 | 365;

export type KavenixStatisticsMetricKey =
  | "signups"
  | "verifiedDomains"
  | "inboundMessages"
  | "outboundMessages"
  | "revenue"
  | "successfulLogins";

export type KavenixStatisticsDailyPoint = Record<
  KavenixStatisticsMetricKey,
  number
> & {
  date: string;
  failedCharges: number;
  successfulCharges: number;
};

export type KavenixStatisticsDetailItem = {
  details: string[];
  href: string | null;
  id: string;
  occurredAt: string;
  subtitle: string | null;
  title: string;
};

export type KavenixStatisticsDetail = {
  date: string;
  items: KavenixStatisticsDetailItem[];
  metricKey: KavenixStatisticsMetricKey;
  truncated: boolean;
};

export type KavenixStatisticsPeriodMetrics = Record<
  KavenixStatisticsMetricKey,
  number
> & {
  activeMailboxes: number;
  failedCharges: number;
  paymentAttempts: number;
  successfulCharges: number;
};

export type KavenixStatisticsFunnel = {
  connected: number;
  paid: number;
  sentMail: number;
  signups: number;
};

export type KavenixStatisticsAdoption = {
  activeApiOwners: number;
  activeAutoSendOwners: number;
  activePaidOwners: number;
  aiRelayOwners: number;
  pushEnabledOwners: number;
  signatureOwners: number;
  totalOwners: number;
};

export type KavenixStatisticsTopDomain = {
  companyName: string;
  domain: string;
  inboundMessages: number;
  lastActiveAt: string | null;
  outboundMessages: number;
  totalMessages: number;
};

export type KavenixStatisticsActionSeverity = "critical" | "warning" | "info";

export type KavenixStatisticsActionId =
  | "queued-messages"
  | "billing-grace"
  | "sync-errors"
  | "content-sync-errors"
  | "pending-domains"
  | "auto-send-failures"
  | "relay-failures"
  | "push-failures"
  | "missing-recovery";

export type KavenixStatisticsActionItem = {
  count: number;
  description: string;
  id: KavenixStatisticsActionId;
  severity: KavenixStatisticsActionSeverity;
  title: string;
};

export type KavenixStatisticsActionDetailItem = {
  details: string[];
  id: string;
  occurredAt: string | null;
  subtitle: string | null;
  title: string;
};

export type KavenixStatisticsActionDetail = {
  actionId: KavenixStatisticsActionId;
  items: KavenixStatisticsActionDetailItem[];
  truncated: boolean;
};

export type KavenixStatisticsSnapshot = {
  activeMailboxes: number;
  activeSubscriptions: number;
  expectedMonthlyRevenue: number;
  missingRecoveryEmails: number;
  totalOwners: number;
  verifiedDomains: number;
};

export type KavenixStatistics = {
  actionItems: KavenixStatisticsActionItem[];
  adoption: KavenixStatisticsAdoption;
  current: KavenixStatisticsPeriodMetrics;
  currentDaily: KavenixStatisticsDailyPoint[];
  currentFunnel: KavenixStatisticsFunnel;
  generatedAt: string;
  previous: KavenixStatisticsPeriodMetrics;
  previousFunnel: KavenixStatisticsFunnel;
  rangeDays: KavenixStatisticsRange;
  snapshot: KavenixStatisticsSnapshot;
  topDomains: KavenixStatisticsTopDomain[];
};
