import useSWR from "swr";
import queryString from "query-string";

import fetcher from "./fetcher";

export interface BuildkiteBuildStatsParams {
  branch?: string;
  from?: string;
}

export interface BuildkiteBuildStats {
  org: string;
  pipeline: string;
  items: Array<BuildkiteBuildStatsItem>;
}

export interface BuildkiteBuildStatsItem {
  buildNumber: number;
  createdAt: string;
  branch: string;
  state: string;
  waitTime: number;
  runTime: number;
}

export function useBuildkiteBuildStats(
  org: string,
  pipeline: string,
  params: BuildkiteBuildStatsParams
) {
  const { data, error } = useSWR(
    queryString.stringifyUrl(
      {
        url: `/api/buildkite/organizations/${org}/pipelines/${pipeline}/stats`,
        query: params as any,
      },
      { skipNull: true }
    ),
    fetcher
  );
  return {
    data: data as BuildkiteBuildStats,
    error,
    loading: !error && !data,
  };
}

export function useBuildkitePipelineBranches(org: string, pipeline: string) {
  const { data, error } = useSWR(
    queryString.stringifyUrl(
      {
        url: `/api/buildkite/organizations/${org}/pipelines/${pipeline}/branches`,
      },
      { skipNull: true }
    ),
    fetcher
  );
  return {
    data: data as string[],
    error,
    loading: !error && !data,
  };
}
