import React, { useCallback, useEffect, useMemo, useState } from 'react'
import styles from './index.module.scss'
import { Button, Input } from 'antd'
import { useDispatch, useSelector } from 'react-redux'
import { A1EditInfoType } from './data'
import { A4_APIdel, A4_APIgetList, A4_APIpublish } from '@/store/action/A4news'
import { RootState } from '@/store'
import { MessageFu } from '@/utils/message'
import { A4tableType } from '@/types/api/A4news'
import MyPopconfirm from '@/components/MyPopconfirm'
import MyTable from '@/components/MyTable'
import { A4tableC } from '@/utils/tableData'
import A4add from './A4add'
import { handleCopyClick } from '@/utils/copyTxt'
import { editPreview } from '@/store/action/layout'
import { baseURL } from '@/utils/http'

const pageDataBase = {
  pageNum: 1,
  pageSize: 10
}

function A4news() {
  const dispatch = useDispatch()

  const [pageData, setPageData] = useState(pageDataBase)
  const [title, setTitle] = useState('')
  const getListFu = useCallback(
    (title?: string) => {
      // status: -1 全部 0 未发布 1 已发布
      dispatch(A4_APIgetList({ ...pageData, status: -1, title }))
    },
    [dispatch, pageData]
  )

  useEffect(() => {
    getListFu()
  }, [getListFu])

  // 点击重置
  const resetSelectFu = useCallback(() => {
    setPageData({ ...pageDataBase })
  }, [])

  const tableInfo = useSelector((state: RootState) => state.A4news.tableInfo)

  const delTableFu = useCallback(
    async (id: number) => {
      const res = await A4_APIdel(id)
      if (res.code === 0) {
        MessageFu.success('删除成功!')
        if (tableInfo.list.length === 1 && pageData.pageNum > 1) {
          setPageData({ ...pageData, pageNum: pageData.pageNum - 1 })
        }
        getListFu()
      }
    },
    [getListFu, pageData, tableInfo.list.length]
  )

  const publishFu = useCallback(
    async (id: number) => {
      const res = await A4_APIpublish(id)
      if (res.code === 0) {
        MessageFu.success('发布成功!')
        getListFu()
      }
    },
    [getListFu]
  )

  const tableLastBtn = useMemo(() => {
    return [
      {
        title: '操作',
        render: (item: A4tableType) => (
          <>
            <Button
              size='small'
              type='text'
              onClick={() =>
                handleCopyClick(
                  item.status === 1
                    ? `${baseURL}/mini/#/allDetailsShow?id=${item.informationId}&type=information&isFrom=weixin`
                    : `${baseURL}/mini/#/allDetailsShow?id=${item.informationId}&type=information&preview=1&isFromPage=indexPage/news`
                )
              }
            >
              复制地址
            </Button>
            {item.status === 0 && (
              <Button
                size='small'
                type='text'
                onClick={() =>
                  dispatch(
                    editPreview({
                      isOpenPreview: true,
                      src: `/allDetailsShow?id=${item.informationId}&type=information&preview=1&isFromPage=indexPage/news`
                    })
                  )
                }
              >
                预览
              </Button>
            )}
            <Button
              size='small'
              type='text'
              onClick={() => setEditInfo({ id: item.informationId, txt: '编辑' })}
            >
              编辑
            </Button>
            {item.status === 0 && (
              <Button size='small' type='text' onClick={() => publishFu(item.informationId)}>
                发布
              </Button>
            )}
            <MyPopconfirm txtK='删除' onConfirm={() => delTableFu(item.informationId)} />
          </>
        )
      }
    ]
  }, [delTableFu, dispatch, publishFu])

  //新增、编辑
  const [editInfo, setEditInfo] = useState<A1EditInfoType>({
    id: 0,
    txt: ''
  })

  return (
    <div className={styles.A4news}>
      <div className='pageTitle'>克博资讯 {editInfo.id ? ` - ${editInfo.txt}` : ''}</div>

      {/* 顶部筛选 */}
      <div className='A4top'>
        <div className='A4topLeft'>
          <Input placeholder='请输入标题' onChange={e => setTitle(e.target.value)} value={title} />
          <Button type='primary' onClick={() => getListFu(title)}>
            搜索
          </Button>
          <Button
            type='primary'
            onClick={() => {
              setTitle('')
              getListFu()
            }}
          >
            重置
          </Button>
        </div>
        <Button type='primary' onClick={() => setEditInfo({ id: -1, txt: '新增' })}>
          新增
        </Button>
      </div>

      {/* 表格主体 */}
      <div className='A4tableBox'>
        <MyTable
          myKey='informationId'
          yHeight={625}
          list={tableInfo.list}
          columnsTemp={A4tableC}
          lastBtn={tableLastBtn}
          pageNum={pageData.pageNum}
          pageSize={pageData.pageSize}
          total={tableInfo.total}
          onChange={(pageNum, pageSize) => setPageData({ ...pageData, pageNum, pageSize })}
        />
      </div>

      {/* 新增 / 编辑 */}
      {editInfo.id ? (
        <A4add
          editInfo={editInfo}
          closeFu={() => setEditInfo({ id: 0, txt: '新增' })}
          addTableFu={resetSelectFu}
          editTableFu={getListFu}
        />
      ) : null}
    </div>
  )
}

const MemoA4news = React.memo(A4news)

export default MemoA4news
