// i know i can import one but
// i can't find one so here we are

export interface GithubUser {
  id: number;
  login: string;
  display_login: string;
  gravatar_id: string;
  url: string;
  avatar_url: string;
}

export interface GithubRepo {
  id: number;
  name: string;
  url: string;
}

export interface GithubCommit {
  sha: string;
  author: {
    email: string;
    name: string;
  };
  message: string;
  distinct: boolean;
  url: string;
}

export interface GithubPullRequest {
  url: string;
  id: number;
  node_id: string;
  html_url: string;
  diff_url: string;
  patch_url: string;
  issue_url: string;
  number: number;
  state: string;
  locked: boolean;
  title: string;
  body: string;
  created_at: string;
  updated_at: string;
  closed_at: string | null;
  merged_at: string | null;
  merge_commit_sha: string | null;
  draft: boolean;
  // there's more but i don't wanna
}

export interface GithubRelease {
  url: string;
  assets_url: string;
  upload_url: string;
  html_url: string;
  id: number;
  // author: AUTHOR
  node_id: string;
  tag_name: string;
  target_commitish: string;
  name: string;
  draft: boolean;
  prerelease: boolean;
  created_at: string;
  published_at: string;
  tarball_url: string;
  zipball_url: string;
  body: string;
  short_description_html: string;
  is_short_description_html_truncated: boolean;
}

export interface GithubCommitEventPayload {
  push_id: number;
  size: number;
  distinct_size: number;
  ref: string;
  head: string;
  before: string;
  commits: GithubCommit[];
}

export interface GithubPullRequestEventPayload {
  action: string;
  number: number;
  pull_request: GithubPullRequest;
}

export interface GithubReleaseEventPayload {
  action: string;
  release: GithubRelease;
  public: boolean;
  created_at: string;
}

export interface GithubEvent {
  id: string;
  type: "PushEvent" | "CreateEvent" | "ReleaseEvent" | "PullRequestEvent";
  actor: GithubUser;
  repo: GithubRepo;
  payload:
    | GithubCommitEventPayload
    | GithubPullRequestEventPayload
    | GithubReleaseEventPayload;
  public: boolean;
  created_at: string;
}

export interface GithubPushEvent extends GithubEvent {
  type: "PushEvent";
  payload: GithubCommitEventPayload;
}

export interface GithubCreateEvent {}

export interface GithubReleaseEvent {}