import {Button, Tooltip} from 'antd'
import { FileExcelOutlined } from '@ant-design/icons'
import { useEffect, useState } from "react"
import {invokeWebApiWrapperAsync, download} from '../../components/factory'
import DocumentsTemplate from './DocumentsTemplate'
import LoaderPortal from '../../components/LoaderPortal'
import { Flex } from '../../components/Grid'
import { WellService } from '../../services/api'

const idFileCategoryDrillingProgramItems = 13;

export default function DrillingProgram({idWell}) {
  const [downloadButtonEnabled, selDownloadButtonEnabled] = useState(false)
  const [showLoader, setShowLoader] = useState(false)
  const [tooltip, setTooltip] = useState('нет файлов для формирования')
  const [wellLabel, setWellLabel] = useState(`${idWell}`)

  useEffect(() => invokeWebApiWrapperAsync(
    async () => {
      const well = await WellService.get(idWell)
      setWellLabel(well.caption ?? `${idWell}`)
    },
    setShowLoader,
    `Не удалось загрузить название скважины "${idWell}"`
  ), [idWell])
  
  const urlDownloadProgram =`/api/well/${idWell}/drillingProgram`

  const downloadProgram = () => invokeWebApiWrapperAsync(async()=>{
    await download(urlDownloadProgram)
  }, 
  setShowLoader,
  "Не удалось загрузить программу бурения")

  const filesUpdated = (files) =>{
    if(!files || files.length === 0){
      setTooltip('Нет файлов для формирования программы')
      selDownloadButtonEnabled(false)
      return
    }
    
    if(files.every(fileInfo => fileInfo?.name.toLowerCase().endsWith('.xlsx'))){
      setTooltip('Программа доступна для скачивания')
      selDownloadButtonEnabled(true)
    }
    else{
      setTooltip('Список файлов содержит недопустимые типы файлов')
    }
  }

  const downloadButton = <div>
    <span>Программа бурения</span>
    <Flex>
      <Tooltip title={tooltip}>
        <Button 
          type="primary"
          onClick={downloadProgram}
          disabled={!downloadButtonEnabled}>
          Сформировать и скачать
        </Button>
      </Tooltip>
      <Tooltip title={tooltip}>
        <Button 
          type="link"
          onClick={downloadProgram}
          disabled={!downloadButtonEnabled}>
          <FileExcelOutlined />
          Программа бурения {wellLabel}.xlsx
        </Button>
      </Tooltip>
    </Flex>
  </div>

  return(<LoaderPortal show={showLoader}>
      <DocumentsTemplate
        idWell={idWell}
        idCategory={idFileCategoryDrillingProgramItems}
        accept='.xlsx'
        headerChild={downloadButton}
        onChange={filesUpdated} />
    </LoaderPortal>)
}