/*
 * @Overview 팝업 생성
 * @Function 다가오는 공정
 * 재사용 불가 Tb_oper 사용
 */

class CreateMonitor {
  constructor(options) {
    const {
      container,
      fields,
      columns,
      selectKey,
      mode,
      setFilter,
    } = options;

    this.container = container;
    this.fields = fields;
    this.columns = columns;
    this.selectKey = selectKey;
    this.mode = mode;

    // 콜백 함수
    this.setFilter = setFilter;
  }

  init() {
    vnLoad('', this.container, '', (loadHtml) => {
      this.modal = kuls_modal(loadHtml);
      this.setSelectOption();

      
      //컬럼 공통 규칙
      const commonFieldData = {
        vertAlign: "middle",
        hozAlign: "center",
        resizable: "header",
        headerHozAlign: "center",
        headerSortTristate: true,
      };
      
      // 테이블 생성
      this.tbModal = new Tabulator(".awn-popup-confirm .hy-table", {
        layout: "fitColumns",
        columns: this.fields, //컬럼 설정
        columnDefaults: commonFieldData,
        headerSortElement: "<i class='bi'></i>", //정렬 아이콘
      });
      
      this.textSearch = document.querySelector("#awn-popup-wrapper [name=stxt]") || false;
      const selectSearch = document.querySelector("#awn-popup-wrapper [name=sgrp]") || false;
      
      
      // popup.js의 createPopup 클래스와의 다른부분 (Tb_oper인 테이블이 있어야한다. 즉, 재사용xx)
      if (this.textSearch) {
        this.textSearch.value = Tb_oper.tbList.getSelectedData()[0]?.OP_CD // 공정코드 랜딩
        this.textSearch.addEventListener("keyup", () => { //검색어 입력 이벤트
          this.setFilter(this.tbModal);
        });
      }

      if (this.selectKey) {
        selectSearch.addEventListener("change", () => { //영업분류 변경 이벤트
          this.setFilter(this.tbModal);
        });
      }

      // 테이블 리스트 렌더링
      this.tbModal.on("tableBuilt", () => { //초기 데이터 불러오기 이벤트
        this.getPopList();
      });


    })
    // vnload 끝

  }

  // 선택태그 옵션 생성
  setSelectOption() {
    // 선택태그 있으면
    if (this.selectKey) {
      const selectTag = document.querySelector('#sgrp');
      selectTag.options.length = 0;
      const opt = createOpt('', '- 전 체 -')
      selectTag.add(opt);

      Object.keys(this.selectKey).forEach(key => {
        selectTag.add(createOpt(key, this.selectKey[key]));
      });
    }
  }

  // 데이터 렌더링
  getPopList() {

    ajax_json({
      url: "./sts_order_prod.ajax.php",
      data: {mode: this.mode, OP_CD: Tb_oper.tbList.getSelectedData()[0]?.OP_CD},
      success: (data) => {
        if (data.code) {
          this.tbModal.setData(data.data);
        }
      },
      error: (request, status, error) => {
        kuls_alert(error.message);
      },
    });
  };

}

/*
 * @Overview 다가오는 공정 리스트
 */
const popComeOper = function () {
 const fields = [
   {field: "WO_SEQ", formatter: "rownum", title: "No", width: 50, headerSort: false, hozAlign: 'center',},
   {field: "WO_NO", title: "생산오더", width: '100', hozAlign: 'center',},
   {field: "ITEM_CD", title: "품목코드", width: '80', hozAlign: 'center',},
   {field: "ITEM_NM", title: "품목명", width: '180', hozAlign: 'left',},
   {field: "BP_NM", title: "업체명", width: '120', hozAlign: 'left',},
   {field: "PROC_SEQ", title: "작업순서", width: '60',},
   {field: "ORD_DT", title: "등록일", width: '100',},
   {field: "DLVY_REQ_DT", title: "납기일", width: '100',},
   {field: "ORD_STATUS", title: "상태", width: '80', formatter: tb_common_funtions.formatterSelect, formatterParams: {values: varsWO_STATUS,}},
 ];
  // 공정 필드 넣기
  for(let i = 1; i<15; i++){
    if(i > 9){
      fields.push({field: `G${i}`, title: `공정 <br>${i}`, width: '40', hozAlign: 'center',
      formatter: tb_custom_formatter.status,
      formatterParams: { selectValue: Tb_oper.tbList.getSelectedData()[0]?.OP_CD }
    })
    
  }else{
    fields.push({field: `G0${i}`, title: `공정 <br>${i}`, width: '40', hozAlign: 'center',
    formatter: tb_custom_formatter.status,
    formatterParams: { selectValue: Tb_oper.tbList.getSelectedData()[0]?.OP_CD }
    })

    }
  };

  // 비고 필드 넣기
 const Tb_modal = new CreateMonitor({
   container: '/ksvc/site/sts_order_prod/popComponent/comingOper.php',
   fields: fields,
   selectKey: '',
   mode: "getComingOper",
   setFilter: false,
 });

 if(Tb_oper.tbList.getSelectedData()[0]){
   Tb_modal.init();
 }else{
  kuls_alert("공정을 선택해주세요.")
 }

}