/*
 * @Overview 설비별 가동이력 관리
 */

class Tb_main_class {
  constructor(container) {
    this.ajaxUrl = "./reg_faclt_result.ajax.php";
    this.container = document.querySelector(container);
    this.table = this.container.querySelector(".hy-table#fa_status_table")
    this.upBtn = this.container.querySelector(".up-btn") || ""
    this.downBtn = this.container.querySelector(".down-btn") || ""
  }

  /*
   * @Overview 데이터 세팅 함수
   * @Parameter 없음
   */
  getMainList(mode,...test) {
    // const talert= window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000);
    const arr = test;
    const data = new Object();

    for(let i=0; i < arr.length; i++){
      let temp = [arr[i]]
      console.log();
      if(document.getElementById(arr[i]).type == "checkbox"){
          data[temp] = document.getElementById(temp).checked?"Y":"N";
      }else{
          data[temp] = document.getElementById(temp).value

      }
    }
    data.mode = mode
    ajax_json({
      url: this.ajaxUrl,
      data: data,

      success: (data) => {
        if(data.code) {
          this.tbList.setData(data.data);
        }else{
          kuls_alert(data.mesg);
        }
      },
      error: (req, status, err) => {
        kuls_alert(err.message);
      },
      complete: () => {
        this.tbList.clearAlert();
      },
    });

    return true;
  }

  /*
   * @Overview  셀 수정 이벤트
   * @Parameter 없음
   */
  cellEdited(cell) {
    cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U";
    const totalRunTm = this.convertHtoM(cell.getData().OPER_ED_TM) - this.convertHtoM(cell.getData().OPER_ST_TM);
    const realRunTm = totalRunTm - cell.getData().STD_SETUP_TM;
    if(cell.getColumn().getField()!=="STOP_CD"){
      cell.getRow().update({ TOTAL_RUN_TM: totalRunTm, REAL_RUN_TM: realRunTm })
    }
  }

  /*
   * @Overview  시간 -> 분 바꾸는 함수
   * @Parameter 없음
   */
  convertHtoM(TM){
    const time = TM.split(":");
    return time[0]*60 + time[1]*1
  }

  /*
   * @Overview 추가, 수정 및 삭제 데이터 저장
   * @Parameter 없음
   * @Function _STATUS_ : U, I, D Row 인 것 php 처리.
   */
  putData() {

    ajax_json({
      url: this.ajaxUrl,
      data: {
        "mode": "putFacltRslt",
        "reqdata": JSON.stringify(this.tbList.getData().filter(row=> row._STATUS_))
      },
      success: (data)=>{
        if (data.code) {
          kuls_success("저장되었습니다.");
          this.getMainList('getFacltRsltList','date_st','date_ed','FACLT_CD');
        }else{
          kuls_alert(data.mesg);
        }
      },
      error: function (request, status, error) {
        kuls_alert(error.message);
      },
      complete: function () {
      }
    });

  }

  /*
   * @Overview 최초 실행 함수
   * @Parameter 없음
   */
  init() {
    // field 정의
    const fields = [
      { field:"FACLT_OPER_NO", formatter:"rownum", title:"NO", width:50},
      { field:"WRK_FACLT_CD", title:"설비", width:100},
      { field:"RUNSTOP_GB", title:"구분", width:80,cssClass:"user-list",
        editor:false, editorParams: {values: varsRUNSTOP_GB,},
        formatter: tb_common_funtions.formatterSelect, formatterParams: {values: varsRUNSTOP_GB,}
      },
      { field:"WORK_DT", title:"작업일", width:70,hozAlign: "center",},
      { field:"OPER_ST_TM", title:"시작시간", width:100, },
      { field:"OPER_ED_TM", title:"종료시간", width:100, },
      { field:"WO_NO", title:"생산오더", width: 100, hozAlign: "center",},
      { field:"ITEM_CD", title:"품목", width: 100, hozAlign: "left ",},
      { field:"ITEM_NM", title:"품명", width: 250, hozAlign: "left",},
      { field:"OP_CD", title:"공정", width:70,hozAlign: "center",},
      { field:"STOP_CD", title:"비가동사유", width:150, cssClass:"user-list",
        editor:false, editorParams: {values: varsSTOP_CD,},
        formatter: tb_common_funtions.formatterSelect, formatterParams: {values: varsSTOP_CD,}, hozAlign: "left ",
      },
      { field:"TOTAL_RUN_TM", title:"가동시간<br>(분)", width:70, hozAlign: "right", },
      { field:"STD_SETUP_TM", title:"준비시간<br>(분)", width:70, hozAlign: "right", formatter:"money", formatterParams:{ decimal:".",precision:0 } },
      { field:"PRD_QTY",      title:"가공수량",        width: 70, hozAlign: "right",formatter:"money", formatterParams:{ decimal:".",precision:0 }},
      { field:"REAL_RUN_TM",  title:"가공시간<br>(분)", width:70, hozAlign: "right", formatter:"money", formatterParams:{ decimal:".",precision:0 } },

    ];

    const commonFieldData = {
      headerSort: true,
      vertAlign: "middle",
      hozAlign: "center",
      resizable: "header", //Resize 는 헤더에서만 가능
      headerHozAlign: "center", //헤더 정렬
      headerSortTristate: true, //데이터 정렬 => 정/역/초기화
    };

    this.tbList = new Tabulator(this.table, {
      layout: "fitColumns",
      data: [], //기본 데이터
      columns: fields, //컬럼 설정
      columnDefaults: commonFieldData,
      headerSortElement: "<i class='bi'></i>"
    });

    // 데이터 불러오기
    this.tbList.on("tableBuilt", () => {
      this.getMainList('getFacltRsltList','date_st','date_ed','FACLT_CD');
    });
    // row 클릭 시에
    this.tbList.on("rowClick", (e, tgt) => {
      this.rowClick && this.rowClick(e, tgt);
    });
    // cell 클릭 시에
    this.tbList.on("cellClick", (e, tgt) => {
      this.cellClick && this.cellClick(e, tgt);
    });
    // cell 수정 시에
    this.tbList.on("cellEdited", (cell) => {
      this.cellEdited && this.cellEdited(cell);
    });

    // 조회
    ["click", "keypress"].forEach((evt) => {
      const filterBtn = document.querySelector("#filter_btn");
      filterBtn.addEventListener(evt, () => {
        this.getMainList('getFacltRsltList','date_st','date_ed','FACLT_CD');
      });
    });
    // 저장
    ["click", "keypress"].forEach((evt) => {
      const putBtn = document.querySelector("#put_btn");
      putBtn.addEventListener(evt, () => {
        this.putData();
      });
    });

  }
}

const Tb_main = new Tb_main_class("#main_table");
Tb_main.init();
