import genericProxyHandler from "utils/proxy/handlers/generic";
import { asJson } from "utils/proxy/api-helpers";

const widget = {
  api: "{url}/api/v3/{endpoint}?apikey={key}",
  proxyHandler: genericProxyHandler,

  mappings: {
    series: {
      endpoint: "series",
      map: (data) => asJson(data).map((entry) => ({
        title: entry.title,
        id: entry.id
      }))
    },
    queue: {
      endpoint: "queue",
      validate: [
        "totalRecords"
      ]
    },
    "wanted/missing": {
      endpoint: "wanted/missing",
      validate: [
        "totalRecords"
      ]
    },
    "queue/details": {
      endpoint: "queue/details",
      map: (data) => asJson(data).map((entry) => ({
        trackedDownloadState: entry.trackedDownloadState,
        trackedDownloadStatus: entry.trackedDownloadStatus,
        timeLeft: entry.timeleft,
        size: entry.size,
        sizeLeft: entry.sizeleft,
        seriesId: entry.seriesId,
        episodeTitle: entry.episode?.title ?? entry.title,
        episodeId: entry.episodeId ?? entry.id,
        status: entry.status,
      })).sort((a, b) => {
        const downloadingA = a.trackedDownloadState === "downloading"
        const downloadingB = b.trackedDownloadState === "downloading"
        if (downloadingA && !downloadingB) {
          return -1;
        }
        if (downloadingB && !downloadingA) {
          return 1;
        }

        const percentA = a.sizeLeft / a.size;
        const percentB = b.sizeLeft / b.size;
        if (percentA < percentB) {
          return -1;
        }
        if (percentA > percentB) {
          return 1;
        }
        return 0;
      })
    },
    calendar: {
      endpoint: "calendar",
      params: ["start", "end", "unmonitored", "includeSeries", "includeEpisodeFile", "includeEpisodeImages"],
    },
  },
};

export default widget;