import type { IssueMatrixRow } from "@/features/pswg/issue-matrix/components/issue-matrix-data";
import type { WorkingGroupIssueDetail } from "@/features/pswg/working-group-issues/service/working-group-issues-service";
import {
  tWgIssues,
  type WgIssuesLanguage,
} from "@/features/pswg/working-group-issues/wg-issues-i18n";

import type {
  IssueViewDetailData,
  IssueViewDetailLabels,
} from "./issue-view-detail-types";

export function getIssueViewDetailLabels(
  language: WgIssuesLanguage,
): IssueViewDetailLabels {
  return {
    submittedDetail: tWgIssues(language, "submittedDetail"),
    governmentPrimaryAgency: tWgIssues(language, "governmentPrimaryAgency"),
    submittedDate: tWgIssues(language, "submittedDate"),
    meetingDate: tWgIssues(language, "meetingDate"),
    category: tWgIssues(language, "category"),
    status: tWgIssues(language, "status"),
    meetingReferenceDocument: tWgIssues(
      language,
      "meetingReferenceDocument",
    ),
    issueDescription: tWgIssues(language, "issueDescription"),
    recommendation: tWgIssues(language, "recommendation"),
    notAvailable: tWgIssues(language, "notAvailable"),
  };
}

// Draft / Saved issues have not been submitted yet, so they have no submitted
// date (the underlying value is just the creation date).
function isSubmittedIssue(status: WorkingGroupIssueDetail["status"]): boolean {
  return status !== "Draft" && status !== "Saved";
}

export function toIssueViewDetailDataFromWgIssue(
  detail: WorkingGroupIssueDetail,
): IssueViewDetailData {
  return {
    primaryAgencyName: detail.primaryAgencyName,
    primaryAgencyLogo: detail.primaryAgencyLogo,
    submittedDate: isSubmittedIssue(detail.status)
      ? detail.submittedDate
      : null,
    meetingDate: detail.meetingDate,
    category: detail.category,
    description: detail.description,
    recommendation: detail.recommendation,
    attachment: detail.attachment,
  };
}

export function toIssueViewDetailDataFromIssueMatrix(
  issue: IssueMatrixRow,
): IssueViewDetailData {
  return {
    primaryAgencyName: issue.primaryAgency,
    primaryAgencyLogo: issue.primaryAgencyImage,
    submittedDate: issue.submittedDate,
    meetingDate: issue.meetingDate ?? null,
    category: issue.category,
    description: issue.issueDescription,
    recommendation: issue.recommendation,
    attachment: issue.attachment,
  };
}
