<script setup lang="ts">

import axios from 'axios'
import notyf from "/@src/plugins/notyf.ts";

const registerFormOpen = ref(false)
const params = reactive({
  cateCd: '',
  contNo: '',
  title: '',
  compNm: '',
  signDt: '',
  contAmt: '',
  contStatCd: '',
  contStat: '',
  regsabun: '',
  regNm: '',
  regDt: '',
  reason: '',
  page: 1,
  row: 10,
  flexColumn: [],
  modalColumn: [],
})

const completedPriceDataParams = reactive({
  prcsNo:'',
  cateCd:'',
  cateNm:'',
  bizNo:'',
  compNm:'',
  title:'',
  content:'',
  regSdat:'',
  regEdat:'',
  regSabun:'',
  regNm:'',
  regDt:'',
  amt:'',
  stCd:'',
  stNm:'',
  svyDt:'',
  reason:'',
  estimates: [],
  page: 1,
  row: 5,
})

params.modalColumn = [
  { key: 'cateNm', label: '분야' },
  { key: 'title', label: '제목' },
  { key: 'regNm', label: '담당자' },
  { key: 'stNm', label: '등록상태' },
  { key: 'title', label: '비고' },
  { key: 'regNm', label: '선택' },
]

const selectedCode = ref()
const priceSearchCheckBoxStatus = ref(false)

const data = reactive({
  contractData: [],
  completedPriceSearchData: [],
})

const isLoading = ref(false)
watch(registerFormOpen, async (isOpen) => {
  if (isOpen) {
    isLoading.value = true
    // error.value = null
    try {
      const priceSearchDataRespone = await axios.get('/api/cont/prcs')
      data.completedPriceSearchData = Array.isArray(priceSearchDataRespone.data) ? priceSearchDataRespone.data : []
    }
    catch (error) {
      console.log(error)
      data.priceData = []
    }
  }
})

function formatDate(dateStr) {
  if (!dateStr) return ''
  const date = new Date(dateStr)
  return date.toLocaleDateString('ko-KR', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
  }).replace(/\./g, '-').replace(/\s/g, '').replace(/-$/, '')
}

function getDateDiff(start, end) {
  if (!start || !end) return null
  const startDate = new Date(start)
  const endDate = new Date(end)
  const diff = Math.ceil((endDate - startDate) / (1000 * 60 * 60 * 24))
  return diff >= 0 ? diff + 1 : null
}

const contractPeriod = computed(() => {
  const start = completedPriceDataParams.regSdat
  const end = completedPriceDataParams.regEdat
  const startStr = formatDate(start)
  const endStr = formatDate(end)
  const diff = getDateDiff(start, end)
  if (startStr && endStr && diff) {
    return `${startStr} ~ ${endStr} (${diff}일)`
  }
  else if (startStr && endStr) {
    return `${startStr} ~ ${endStr}`
  }
  else if (startStr) {
    return `${startStr} ~`
  }
  else if (endStr) {
    return `~ ${endStr}`
  }
  else {
    return ''
  }
})


function handlePriceRowClick(row) {
  completedPriceDataParams.prcsNo = row.prcsNo || ''
  completedPriceDataParams.cateCd = row.cateCd || ''
  completedPriceDataParams.cateNm = row.cateNm || ''
  completedPriceDataParams.title = row.title || ''
  completedPriceDataParams.content = row.content || ''
  completedPriceDataParams.regSdat = row.regSdat || ''
  completedPriceDataParams.regEdat = row.regEdat || ''
  completedPriceDataParams.regSabun = row.regSabun || ''
  completedPriceDataParams.regNm = row.regNm || ''
  completedPriceDataParams.regDt = row.regDt || ''
  completedPriceDataParams.stCd = row.stCd || ''
  completedPriceDataParams.stNm = row.stNm || ''
  completedPriceDataParams.svyDt = row.svyDt || ''
  completedPriceDataParams.reason = row.reason || ''

  selectedCode.value = row.cateCd || ''
  completedPriceDataParams.estimates = row.estimates || []

  if (row.estimates && row.estimates.length > 0) {
    const minEstimate = row.estimates.reduce((min, curr) => curr.amt < min.amt ? curr : min, row.estimates[0])
    completedPriceDataParams.bizNo = minEstimate.bizNo || ''
    completedPriceDataParams.compNm = minEstimate.compNm || ''
    completedPriceDataParams.amt = minEstimate.amt || ''
  } else {
    completedPriceDataParams.bizNo = ''
    completedPriceDataParams.compNm = ''
    completedPriceDataParams.amt = ''
    notyf.error("견적서가 없습니다.")
  }

  registerFormOpen.value = false
  priceSearchCheckBoxStatus.value = !!row
  console.log(row)
  console.log(completedPriceDataParams.amt)
}

const showFileInputs = ref(false)
const fileInputs = ref([
  { file: null, description: '시행 품의문' },
  { file: null, description: '소액수의계약서' },
  { file: null, description: '수의계약 체결 제한 여부 확인서' },
  { file: null, description: '퇴직자 재직여부 확인서' },
  { file: null, description: '인지세 납부확인서' },
  { file: null, description: '정부권장정책 이행 구매 검토서' },
  { file: null, description: '기타' }
])

function handleFileChange(e, idx) {
  const files = e.target.files
  if (files && files.length > 0) {
    fileInputs.value[idx].file = files[0]
  } else {
    fileInputs.value[idx].file = null
  }
}




</script>

<template>
  <div class="page-content is-navbar-lg">
    <div class="datatable-wrapper">
      <div class="table-container">
        <table class="table datatable-table is-fullwidth">
          <colgroup>
            <col style="width: 10%;">
            <col style="width: 20%;">
            <col style="width: 20%;">
            <col style="width: 10%;">
            <col style="width: 10%;">
            <col style="width: 20%;">
            <col style="width: 10%;">
          </colgroup>
          <tbody>
            <tr>
              <td>분야</td>
              <td>
                <span class="colum">
                  <VField class="">
                    <VCodeSelect
                      v-model="selectedCode"
                      cd_grp="5"
                    /></VField>
                </span>
              </td>
              <td>
                <VButton
                  color="primary"
                  @click="registerFormOpen = true"
                >
                  가격조사 가져오기
                </VButton>
                <VModal
                  is="form"
                  :open="registerFormOpen"
                  title="계약관리 등록"
                  size="contract-big"
                  actions="right"
                >
                  <template #content>
                    <div class="modal-form">
                      <ComVFlexTable
                        :data="data.completedPriceSearchData"
                        :columns="params.modalColumn"
                        :compact="true"
                        :separators="true"
                        @row-click="handlePriceRowClick"
                        clickable
                      />
                    </div>
                  </template>
                </VModal>
              </td>
              <td>
                <VField class="is-flex">
                  <VControl raw subcontrol>
                    <VCheckbox
                      label="가격조사여부"
                      color="info"
                      v-model="priceSearchCheckBoxStatus"
                    />
                  </VControl>
                </VField>
              </td>
              <td colspan="3">
                <div class="column is-fullhd">
                  <VField>
                    <VControl>
                      <input
                        v-model="completedPriceDataParams.reason"
                        class="input custom-text-filter"
                        placeholder="가격조사 안했을 시 예외 사유 입력(필수)"
                      >
                    </VControl>
                  </VField>
                </div>
              </td>
            </tr>
            <tr>
              <td>계약명</td>
              <td colspan="6">
                <VField>
                  <VControl>
                    <input
                      v-model="completedPriceDataParams.title"
                      class="input custom-text-filter"
                      placeholder="계약명"
                    >
                  </VControl>
                </VField>
              </td>
            </tr>
            <tr>
              <td>계약상대자</td>
              <td>
                <VField>
                  <VControl>
                    <input
                      v-model="completedPriceDataParams.bizNo"
                      class="input custom-text-filter"
                      placeholder="사업자번호"
                    >
                  </VControl>
                </VField>
              </td>
              <td>
                <VField>
                  <VControl>
                    <input
                      v-model="completedPriceDataParams.compNm"
                      class="input custom-text-filter"
                      placeholder="업체명"
                    >
                  </VControl>
                </VField>
              </td>
              <td>
                <VButton color="warning">
                  부정당 확인
                </VButton>
              </td>
              <td>
                <VButton color="success">
                  정상
                </VButton>
              </td>
              <td>
                <VButton color="warning">
                  분할계약 확인
                </VButton>
              </td>
              <td>
                <VButton color="success">
                  정상
                </VButton>
              </td>
            </tr>
            <tr>
              <td>계약체결일</td>
              <td>
                <VField>
                  <VControl>
                    <input
                      :value="formatDate(completedPriceDataParams.regSdat)"
                      class="input custom-text-filter"
                      placeholder="계약체결일"
                    >
                  </VControl>
                </VField>
              </td>
              <td>
                <VButton
                  color="primary"
                >
                  계 약 금 액
                </VButton>
                <VModal
                  actions="center"
                  title="계약금액"
                >
                  <template #content>
                    <VPlaceholderSection
                      title="Go Premium"
                      subtitle="Unlock more features and business tools by going premium"
                    />
                  </template>
                  <template #action>
                    <VButton color="primary" raised>
                      등록
                    </VButton>
                  </template>
                </VModal>
              </td>
              <td colspan="2">
                <VField>
                  <VControl>
                    <input
                      v-model="completedPriceDataParams.amt"
                      class="input custom-text-filter"
                      placeholder="금액"
                    >
                  </VControl>
                </VField>
              </td>
              <td colspan="1">
                <span class="colum">
                  <VField>
                    <VSelect>
                      <VOption value="">
                        수의계약 사유
                      </VOption>
                    </VSelect>
                  </VField>
                </span>
              </td>
              <td>
                <VButton>근거</VButton>
              </td>
            </tr>
            <tr>
              <td>계약기간</td>
              <td colspan="1">
                <div>
                  <div>
                    <VDatePicker
                      v-model="completedPriceDataParams.regSdat"
                      color="green"
                      trim-weeks
                    >
                      <template #default="{ inputValue, inputEvents }">
                        <VField>
                          <VControl icon="lucide:calendar">
                            <input
                              class="input v-input"
                              type="text"
                              :value="inputValue"
                              placeholder="시작일"
                              v-on="inputEvents"
                            >
                          </VControl>
                        </VField>
                      </template>
                    </VDatePicker>
                  </div>
                </div>
              </td>
              <td colspan="1">
                <div class="">
                  <div>
                    <VDatePicker
                      v-model="completedPriceDataParams.regEdat"
                      color="green"
                      trim-weeks
                    >
                      <template #default="{ inputValue, inputEvents }">
                        <VField>
                          <VControl icon="lucide:calendar">
                            <input
                              class="input v-input"
                              type="text"
                              :value="inputValue"
                              placeholder="종료일"
                              v-on="inputEvents"
                            >
                          </VControl>
                        </VField>
                      </template>
                    </VDatePicker>
                  </div>
                </div>
              </td>
              <td colspan="5">
                계약기간 : {{ contractPeriod }}
              </td>
            </tr>
            <tr>
              <td>첨부파일</td>
              <td colspan="1">
                <VButton color="info" @click="showFileInputs = !showFileInputs">
                  등록
                </VButton>
                </td>
              <td colspan="5">
                <!-- 첨부파일 입력영역: 등록 버튼 클릭 시 토글 -->
                <div v-if="showFileInputs" class="file-upload-list" style="margin-top:10px;">
                  <div
                      v-for="(input, idx) in fileInputs"
                      :key="idx"
                      style="display: flex; align-items: center; margin-bottom: 8px;"
                  >
                    <!-- 파일선택 -->
                    <label class="file-label" style="margin-right: 10px;">
                      <input
                          type="file"
                          class="file-input"
                          @change="e => handleFileChange(e, idx)"
                      />
                      <span class="file-cta">파일선택</span>
                    </label>
                    <span style="flex:1; margin-right: 10px;">{{ input.file ? input.file.name : '첨부된 파일 없음' }}</span>
                    <span style="flex:2; color: #666;">{{ input.description }}</span>
                  </div>
                </div>
              </td>
            </tr>
          </tbody>
        </table>
        <div class="bottom-button">
          <VButton>저 장</VButton>
          <VButton>취 소</VButton>
        </div>
      </div>
    </div>
  </div>
</template>

<style scoped lang="scss">
.table tbody td {
  color: var(--smoke-white);
}
.datatable-table  {
  td{
    font-family: var(--font),serif;
    vertical-align: middle;
    padding: 4px 12px;
    border-bottom: 1px solid var(--fade-grey);
  }

  td:nth-child(1) {
    background-color: var(--primary);
    text-align: center;
  }

  tr:nth-child(3) {
    text-align: center;
  }

  tr td button{
    width: 100%;
  }

  tr:nth-child(5) > td:nth-child(4) {
    color: black;
  }
}

.bottom-button {
  text-align: center;
 button {
  background-color: cornflowerblue;
   margin: 10px;
   font-weight: bold;
   border-color: var(--primary);
   color: white;
   }
  }
  button:nth-child(2) {
    background-color: #AB9A6c;
  }
  button:nth-child(3) {
    background-color: silver;
  }
.field {
  margin-bottom: 0px;
}

.file-label {
  cursor: pointer;
}
.file-input {
  display: none;
}
.file-cta {
  background: #eee;
  padding: 4px 12px;
  border-radius: 4px;
}
</style>
