
(function () {
  "use strict";

  // ------------------- 詳細画面表示時の処理 -------------------
  kintone.events.on('app.record.detail.show', function (event) {
    // 「登園/帰園」ボタン
    const area = kintone.app.record.getSpaceElement('header-clocking-btn-area');

    const clockIn = createBtn('clock-in', '登園', dateToFieldInDetailIn());
    const clockOut = createBtn('clock-out', '帰園', dateToFieldInDetailOut());
    area.appendChild(clockIn);
    area.appendChild(clockOut);

    hideSpaceField(['clock-in-btn-area', 'clock-out-btn-area']);

    // 「伝達事項」
    if (!isBaby(event.record['学年'].value)) {
      kintone.app.record.setFieldShown('伝達事項', false);
    }

    return event;
  });

  function isBaby(grade) {
    return grade === "０歳児" || grade === "１歳児";
  }

  //PVC追加
  function dateToFieldInDetailIn() {
    return async function (e) {
      await new KintoneRestAPIClient().record.updateRecord({
        app: kintone.app.getId(),
        id: kintone.app.record.getId(),
        record: {
          '登園時刻': {
            value: getCurrentTime()
          },
          "出欠": {
            value: "出席"
          }
        }
      });
      location.reload();
    }
  }

  function dateToFieldInDetailOut() {
    return async function (e) {
      await new KintoneRestAPIClient().record.updateRecord({
        app: kintone.app.getId(),
        id: kintone.app.record.getId(),
        record: {
          '帰園時刻': {
            value: getCurrentTime()
          }
        }
      });
      location.reload();
    }
  }

  // ------------------- 印刷画面表示時の処理 -------------------
  kintone.events.on('app.record.print.show', (event) => {
    // 「登園/帰園」ボタン
    hideSpaceField(['clock-in-btn-area', 'clock-out-btn-area']);

    // 「伝達事項」
    if (!isBaby(event.record['学年'].value)) {
      kintone.app.record.setFieldShown('伝達事項', false);
    }
    return event;
  });

  // ------------------- 編集画面表示時の処理 -------------------
  kintone.events.on(['app.record.create.show', 'app.record.edit.show'], function (event) {
    // 「登園/帰園」ボタン
    const clockIn = createBtn('clock-in', '登園', dateToFieldInEditIn());
    kintone.app.record.getSpaceElement('clock-in-btn-area').appendChild(clockIn);
    const clockOut = createBtn('clock-out', '帰園', dateToFieldInEditOut());
    kintone.app.record.getSpaceElement('clock-out-btn-area').appendChild(clockOut);

    // 「伝達事項」
    if (!isBaby(event.record['学年'].value)) {
      kintone.app.record.setFieldShown('伝達事項', false);
    }
    return event;
  });

  // -------------------「園での様子_入力者」の処理 -------------------
  const _DATA_HOLDER_MAP = {}

  // 「園での様子_伝達事項」はテキストエリア（複数行入力欄）であり、app.record.edit.changeイベントをサポートしていません
  // したがって、データを事前に保存しておき、保存（submit）時のタイミングで更新を行います。
  kintone.events.on(['app.record.index.edit.show', 'app.record.create.show', 'app.record.edit.show'], function (event) {
    _DATA_HOLDER_MAP['isEditorChanged'] = false;
    _DATA_HOLDER_MAP['prevSituationValue'] = event.record['園での様子_伝達事項']['value'] || '';
    return event;
  });

  kintone.events.on(['app.record.create.change.園での様子_入力者', 'app.record.edit.change.園での様子_入力者', 'app.record.index.edit.change.園での様子_入力者'], function(event) {
    _DATA_HOLDER_MAP['isEditorChanged'] = true;
    return event;
  });

  kintone.events.on(['app.record.create.submit', 'app.record.edit.submit', 'app.record.index.edit.submit'], function (event) {
    const current = event.record['園での様子_伝達事項']['value'] || '';

    if (_DATA_HOLDER_MAP['prevSituationValue'] != current && !_DATA_HOLDER_MAP['isEditorChanged']) {
        event.record['園での様子_入力者']['value'] = [kintone.getLoginUser()];
    }

    return event;
  });

  //PVC追加
  function dateToFieldInEditIn() {
    return function (e) {
      var record = kintone.app.record.get();
      record['record']['登園時刻']['value'] = getCurrentTime();
      record['record']['出欠']['value'] = "出席";
      kintone.app.record.set(record);
    }
  }

  function dateToFieldInEditOut() {
    return function (e) {
      var record = kintone.app.record.get();
      record['record']['帰園時刻']['value'] = getCurrentTime();
      kintone.app.record.set(record);
    }
  }

  function getCurrentTime() {
    const now = new Date();
    const hours = String(now.getHours()).padStart(2, '0');
    const minutes = String(now.getMinutes()).padStart(2, '0');
    return `${hours}:${minutes}`;
  }
})();