import { apptemplate, eventHnalder } from "@/common/app-template";
import { AppID } from "@/common/appids";
import { initMenuBox, setHeaderButton } from "@/common/header-button";
import { KintoneEvent } from "@/common/kintone-event";
import { 契約情報更新イベント } from "@/event/契約情報更新";
import {
  ShowConfirmDialog,
  SuccessDialog,
  WarningDialog,
} from "@/middleware/swal";
import { getCreateUrl, getDetailUrl } from "@/rest-api/url";
import { 入金予定結果フィールド名 } from "@/types/入金予定結果";
import { 定期申込予約, 状態Dropdown } from "@/types/定期申込予約";
import { setup } from "..";
import { 申込 } from "./自動承認";

setup(() => {
  kintone.events.on(
    [KintoneEvent.詳細.レコード詳細画面を表示した後],
    eventHnalder(async (event) => {
      const record: 定期申込予約 = event.record;

      await initMenuBox();

      const S = 状態Dropdown;
      if (
        [S.新規, S.選考当選, S.予約, S.空き待ち].find((status) => {
          return status === record.status.value;
        }) &&
        record.台数.value === "1"
      ) {
        setHeaderButton(
          "自動承認",
          apptemplate(async ({ setEvent, needReloadAtEnd }) => {
            const confirm = await ShowConfirmDialog({
              text: "承認しますか",
            });
            if (!confirm.isConfirmed) return;

            const entry = new 申込(record);
            await entry.初期化();
            await entry.選定();

            await SuccessDialog.fire();

            await WarningDialog.fire({
              timer: 2000,
              timerProgressBar: true,
              text: "初回請求データを作成してください",
            });
            const 契約 = entry.作成後契約取得();
            if (!契約) throw new Error();

            const param = new URLSearchParams({
              [入金予定結果フィールド名.車室情報管理レコード番号]:
                契約.$id.value,
              [入金予定結果フィールド名.初回振り込み関連申込レコード番号]:
                record.$id.value,
            });
            {
              // 入金予定アプリ画面オープン
              const url = getCreateUrl(AppID.入金予定結果, param);
              console.log(url, param);
              window.open(url, "_blank");
            }
            {
              // 車室情報管理アプリ画面オープン
              const url = getDetailUrl(AppID.車室情報管理, 契約.$id.value);
              window.open(url, "_blank");
            }

            setEvent(new 契約情報更新イベント().getEvent(契約));
            needReloadAtEnd(true);
          })
        );
      }

      if (
        !!record.自動承認契約情報.value &&
        [S.承認_手動, S.承認_自動承認].find((status) => {
          return status === record.status.value;
        })
      ) {
        setHeaderButton(
          "初回入金予定作成",
          apptemplate(async () => {
            // 車室情報管理アプリ画面オープン
            const param = new URLSearchParams({
              [入金予定結果フィールド名.車室情報管理レコード番号]:
                record.自動承認契約情報.value,
              [入金予定結果フィールド名.初回振り込み関連申込レコード番号]:
                record.$id.value,
            });
            const url = getCreateUrl(AppID.入金予定結果, param);
            window.open(url, "_blank");
          })
        );
      }
    })
  );
});
