import { postAlgorithmModelGetAlgorithmModelById } from '@/services/resource/AlgorithmModel';
import { deleteModelVersionDeleteModelVersion, postModelVersionGetModelVersionList } from '@/services/resource/ModelVersion';
import { ArrowLeftOutlined, PlusOutlined } from '@ant-design/icons';
import {
  ActionType,
  PageContainer,
  ProCard,
  ProColumns,
  ProDescriptions,
  ProTable,
} from '@ant-design/pro-components';
import { Access, FormattedMessage, history, useAccess, useParams, useIntl } from '@umijs/max';

import { Button, message } from 'antd';
import React, { useRef, useState } from 'react';
import MyCreateForm from '../ModelVersionList/components/MyCreateForm';
import TableActionCard from '@/components/TableActionCard';
import IsDelete from '@/components/TableActionCard/isDelete';
import UpdateForm from '../ModelVersionList/components/UpdateForm';

/**styles */

const detailStylesProps = {
  marginBottom: 15,
  textColor: '#333333',
};
const headerStylesProps = {
  fontSize: 16,
  fontWeight: 700,
  color: '#333333',
};



const AlgorithmModelDetail: React.FC = () => {
  const access = useAccess();
  const intl = useIntl();

  const actionRef = useRef<ActionType>();

  const [createModalOpen, setCreateModalOpen] = useState<boolean>(false);
  const [updateModalOpen, setUpdateModalOpen] = useState<boolean>(false);

  const [currentRow, setCurrentRow] = useState<API.ModelVersion>();
  const [selectedRowsState, setSelectedRows] = useState<API.ModelVersion[]>([]);
  const [model_fk_id_open, set_model_fk_id_open] = useState(false);
  const [model_fk_id, set_model_fk_id] = useState<API.AlgorithmModel>();
  const [model_fk_id_column_open, set_model_fk_id_column_open] = useState(false);
  const [modelFkIdIds, setModelFkIdIds] = useState([]);
  const [modelFkIdMap, setModelFkIdMap] = useState<{ [key: number]: string }>({});

  const handleDestroy = async (selectedRow: API.ModelVersion) => {
    deleteModelVersionDeleteModelVersion({ id: selectedRow.id })
      .then(() => {
        message.success(intl.formatMessage({ id: 'common.success', defaultMessage: '$$$' }));
        actionRef.current?.reload();
      })
      .catch(() => {
        message.error(intl.formatMessage({ id: 'common.failure', defaultMessage: '$$$' }));
      });
  };

  const columns: ProColumns<API.ModelVersion>[] = [
    {
      title: <FormattedMessage id="resource.model_version.table.list.id" defaultMessage="id" />,
      dataIndex: 'id',
      sorter: true,
    },
  
    {
      title: (
        <FormattedMessage id="resource.model_version.table.list.modelFkId" defaultMessage="$$$" />
      ),
      dataIndex: 'modelFkId',
      hideInSearch: false,
    },
  
    {
      title: <FormattedMessage id="resource.model_version.table.list.version" defaultMessage="$$$" />,
      dataIndex: 'version',
      hideInSearch: true,
    },
  
    {
      title: <FormattedMessage id="resource.model_version.table.list.path" defaultMessage="$$$" />,
      dataIndex: 'path',
      hideInSearch: true,
    },
  
    {
      title: (
        <FormattedMessage id="resource.model_version.table.list.startCode" defaultMessage="$$$" />
      ),
      dataIndex: 'startCode',
      hideInSearch: true,
    },
  
    {
      title: (
        <FormattedMessage id="resource.model_version.table.list.isEnable" defaultMessage="$$$" />
      ),
      dataIndex: 'isEnable',
      filters: true,
      onFilter: true,
      hideInSearch: true,
      valueType: 'switch',
    },
  
    {
      title: <FormattedMessage id="resource.model_version.table.list.remark" defaultMessage="$$$" />,
      dataIndex: 'remark',
      hideInSearch: true,
    },
    {
      title: <FormattedMessage id="resource.model_version.table.list.status" defaultMessage="$$$" />,
      dataIndex: 'status',
      hideInSearch: true,
      valueEnum: {
        1: { text: '已创建', status: 'Default' },
        2: { text: '已发布', status: 'Processing' },
        3: { text: '已上架', status: 'Success' },
        4: { text: '已下架', status: 'Default' },
        5: { text: '已关闭', status: 'Error' },
      },
    },
  
    {
      title: (
        <FormattedMessage id="resource.model_version.table.list.createTime" defaultMessage="$$$" />
      ),
      dataIndex: 'createTime',
      sorter: true,
      hideInSearch: true,
      valueType: 'dateTime',
    },
  
    {
      title: (
        <FormattedMessage id="resource.model_version.table.list.updateTime" defaultMessage="$$$" />
      ),
      dataIndex: 'updateTime',
      sorter: true,
      hideInSearch: true,
      valueType: 'dateTime',
    },
    {
      title: <FormattedMessage id="pages.searchTable.titleOption" defaultMessage="Operating" />,
      dataIndex: 'option',
      valueType: 'option',
      fixed: 'right',
      render: (_, record) => [
        <TableActionCard
          key="TableActionCardRef"
          renderActions={[
            {
              key: 'update',
              renderDom: (
                <Button
                  key="update"
                  type="link"
                  size="small"
                  onClick={() => {
                    setUpdateModalOpen(true);
                    setCurrentRow(record);
                  }}
                >
                  <FormattedMessage id="pages.searchTable.update" defaultMessage="Update" />
                </Button>
              ),
            },
            {
              key: 'destroy',
              renderDom: (
                <IsDelete
                  deleteApi={() => {
                    handleDestroy(record).then(() => {});
                  }}
                ></IsDelete>
              ),
            },
          ]}
        ></TableActionCard>,
      ],
    },
  ];
  //  TODO 需要将业务层代码转移到此处
  // TODO 按UI原稿重新布局此模块
  // 关闭页面
  const doClose = () => {
    history.back();
  };

  const handleCreateModal = () => {
    if (createModalOpen) {
      setCreateModalOpen(false);
      setCurrentRow(undefined);
    } else {
      setCreateModalOpen(true);
    }
  };

  const handleUpdateModal = () => {
    if (updateModalOpen) {
      setUpdateModalOpen(false);
      setCurrentRow(undefined);
    } else {
      setUpdateModalOpen(true);
    }
  };



  const routeParams = useParams();
  return (
    <PageContainer>
      <ProCard split="horizontal" style={{ background: 'transparent' }}>
        <ProCard
          wrap
          bodyStyle={{ margin: 0, padding: 0 }}
          style={{ margin: 0, padding: 0, background: 'transparent' }}
        >
          <ProCard
            title={
              <div onClick={doClose} style={{ display: 'flex', alignItems: 'center' }}>
                <ArrowLeftOutlined style={{ marginRight: 10 }} />
                <span style={{ fontSize: 20, color: '#333333', fontWeight: 700 }}>模型详情</span>
              </div>
            }
            style={{
              margin: 0,
              padding: 0,
              marginBottom: detailStylesProps.marginBottom,
              background: 'transparent',
            }}
            headStyle={{ margin: 0, padding: 0 }}
            bodyStyle={{ margin: 0, padding: 0 }}
          ></ProCard>
          <ProCard
            style={{ margin: 0, padding: 0, marginBottom: detailStylesProps.marginBottom }}
            bodyStyle={{ margin: 0, padding: 20 }}
          >
            <ProDescriptions
              column={4}
              title="模型详细信息"
              tooltip="包含了模型详细信息"
              columns={columns}
              request={async () => {
                console.log(routeParams, 'id');
                const resp = await postAlgorithmModelGetAlgorithmModelById({
                  id: Number(routeParams.id),
                });
                // postModelVersionGetModelVersionList({modelFkId: 3})
                console.log('resp', resp);
                return {
                  data: resp.data?.algorithmModel,
                  success: resp.success,
                };
              }}
            ></ProDescriptions>
          </ProCard>
        </ProCard>
        <ProCard
          title="模型版本"
          extra={<><Access
            accessible={access.canUpdate(history.location.pathname)}
            key={`${history.location.pathname}-add`}
          >
            <Button
              type="primary"
              key="primary"
              onClick={() => {
                setCreateModalOpen(true);
              }}
            >
              <PlusOutlined />{' '}
              <FormattedMessage id="pages.searchTable.new" defaultMessage="New" />
            </Button>
          </Access></>}
          style={{ margin: 0, padding: 0 }}
          headStyle={{ paddingTop: 20, paddingBottom: 20, ...headerStylesProps }}
          bodyStyle={{ margin: 0, padding: 0 }}
        >
          <ProTable
            actionRef={actionRef}
            tableStyle={{ paddingTop: 15, paddingBottom: 15 }}
            columns={columns}
            cardBordered
            toolBarRender={() => [
              
            ]}
            request={async (params = {}, sort) => {
              const { current, ...rest } = params;
              const reqParams = {
                page: current,
                desc: false,
                orderKey: '',
                modelFkId: Number(routeParams?.id),
                ...rest,
              };
              if (sort && Object.keys(sort).length) {
                reqParams.orderKey = Object.keys(sort)[0];
                let sort_select = sort[reqParams.orderKey];
                reqParams.desc = sort_select === 'descend';
              }
              let resp = await postModelVersionGetModelVersionList({ ...reqParams });
              return {
                data: resp.data.list.map((v: API.ModelVersion) => {
                  return { ...v, key: v.id };
                }),
                success: resp.success,
                total: resp.data.total,
                current: resp.data.page,
                pageSize: resp.data.pageSize,
              };
            }}
            editable={{
              type: 'multiple',
            }}
            columnsState={{
              persistenceKey: 'pro-table-singe-demos',
              persistenceType: 'localStorage',
              onChange(value) {
                console.log('value: ', value);
              },
            }}
            rowKey="id"
            search={false}
            options={{
              fullScreen: false,
              setting: false,
              density: false,
              reload: false,
            }}
            form={{
              // 由于配置了 transform，提交的参与与定义的不同这里需要转化一下
              syncToUrl: (values, type) => {
                if (type === 'get') {
                  return {
                    ...values,
                    created_at: [values.startTime, values.endTime],
                  };
                }
                return values;
              },
            }}
            pagination={{
              pageSize: 5,
              onChange: (page) => console.log(page),
            }}
            dateFormatter="string"
          />
        </ProCard>
      </ProCard>
      <MyCreateForm
        createModalOpen={createModalOpen}
        values={{modelFkId: Number(routeParams?.id)}}
        handleModal={handleCreateModal}
        reload={actionRef.current?.reload}
        currentDefaultFieldsData={{modelFkId: Number(routeParams?.id)}}
      />
       <UpdateForm
        updateModalOpen={updateModalOpen}
        values={currentRow || {}}
        handleModal={handleUpdateModal}
        reload={actionRef.current?.reload}
        currentDefaultFieldsData={{modelFkId: Number(routeParams?.id)}}
      />
    </PageContainer>
  );
};
export default AlgorithmModelDetail;
