import { useQuery } from "@tanstack/react-query";

const QUALITEER_URL = "https://qualiteer.elijahparker3.repl.co/api";

const useMock = true;

const asMock = (data) => ({ data });

const fetchApi = (subPath) => async () =>
  fetch(`${QUALITEER_URL}${subPath}`).then((res) => res.json());

export const useCatalogTests = () =>
  useMock
    ? asMock([
        {
          id: 0,
          name: "single",
          class: "single.js",
          image: "node:latest",
          isPipeline: false,
          type: "api",
          description: "This is a single test",
          tags: ["cron_1hour", "reg_us", "env_ci", "proj_core", "skip_alt"],
          path: "tests/assets/suite/single.js",
          created: Date.now(),
          mergeRequest: "https://example.com",
        },
        {
          id: 1,
          name: "failing",
          class: "failing.js",
          image: "node:latest",
          isPipeline: false,
          type: "ui",
          description: "This is a failing test",
          tags: ["cron_1hour", "reg_us", "env_ci", "proj_core"],
          path: "tests/assets/suite/failing.js",
          created: Date.now(),
          mergeRequest: "https://example.com",
        },
        {
          id: 2,
          name: "primary",
          class: "primary.js",
          image: "node:latest",
          isPipeline: true,
          type: "api",
          description: "This is a primary test",
          tags: [
            "cron_1hour",
            "reg_us",
            "proj_core",
            "skip_alt",
            "pipeline_secondary1",
          ],
          path: "tests/assets/suite/primary.js",
          created: Date.now(),
          mergeRequest: "https://example.com",
        },
        {
          id: 3,
          name: "secondary1",
          class: "secondary1.js",
          image: "node:latest",
          isPipeline: true,
          type: "api",
          description: "This is a secondary test",
          tags: [
            "cron_1hour",
            "reg_us",
            "proj_core",
            "compound_tertiary1",
            "compound_tertiary2",
          ],
          path: "tests/assets/suite/secondary1.js",
          created: Date.now(),
          mergeRequest: "https://example.com",
        },
        {
          id: 4,
          name: "secondary2",
          class: "secondary2.js",
          image: "node:latest",
          isPipeline: true,
          type: "api",
          description: "This is a secondary2 test",
          tags: ["cron_1hour", "reg_us", "proj_core", "compound_tertiary3"],
          path: "tests/assets/suite/secondary2.js",
          created: Date.now(),
          mergeRequest: "https://example.com",
        },
        {
          id: 5,
          name: "tertiary1",
          class: "tertiary1.js",
          image: "node:latest",
          isPipeline: true,
          type: "api",
          description: "This is a third test",
          tags: ["cron_1hour", "reg_us", "proj_core"],
          path: "tests/assets/suite/tertiary1.js",
          created: Date.now(),
          mergeRequest: "https://example.com",
        },
        {
          id: 6,
          name: "tertiary2",
          class: "tertiary2.js",
          image: "node:latest",
          isPipeline: true,
          type: "api",
          description: "This is a third2 test",
          tags: ["cron_1hour", "reg_us", "proj_core"],
          path: "tests/assets/suite/tertiary2.js",
          created: Date.now(),
          mergeRequest: "https://example.com",
        },
        {
          id: 5,
          name: "tertiary3",
          class: "tertiary3.js",
          image: "node:latest",
          isPipeline: true,
          type: "api",
          description: "This is a third3 test",
          tags: ["cron_1hour", "reg_us", "proj_core"],
          path: "tests/assets/suite/tertiary3.js",
          created: Date.now(),
          mergeRequest: "https://example.com",
        },
      ])
    : useQuery(["catalogTests"], fetchApi("/catalog/tests"));

export const usePipelineMappings = () =>
  useMock
    ? asMock([
        ["primary", "secondary1", "tertiary1"],
        ["primary", "secondary1", "tertiary2"],
        ["primary", "secondary2", "tertiary3"],
      ])
    : useQuery(["pipelineMappings"], fetchApi("/catalog/pipeline-mappings"));

export const useSilencedAlerts = () =>
  useMock
    ? asMock([
        {
          name: `failing`,
          class: `failing.js`,
          method: "FAKEMETHOD",
          id: 0,
          silencedUntil: new Date().toJSON(),
        },
      ])
    : useQuery(["silenced"], fetchApi("/alerting/silenced"));

export const useCurrentlyFailing = () =>
  useMock
    ? asMock([
        {
          name: "failing",
          class: "failing.js",
          timestamp: new Date().toJSON(),
          method: "FAKEMETHOD",
          cron: "1hour",
          type: "api",
          dailyFails: 12,
          screenshot: "https://picsum.photos/1920/1080",
          recentResults: [1, 0, 0, 1, 0],
          isPipeline: false,
          failedMessage: `Some Test FailureMessage`,
        },
        {
          name: "secondary1",
          class: "secondary1.js",
          timestamp: new Date().toJSON(),
          method: "FAKEMETHOD",
          cron: "1hour",
          type: "api",
          dailyFails: 1,
          screenshot: "https://picsum.photos/1920/1080",
          recentResults: [1, 0, 0, 1, 0],
          isPipeline: true,
          failedMessage: `Some Test FailureMessage from Secondary1`,
        },
      ])
    : useQuery(["failing"], fetchApi("/results/failing"));
