import { css } from "@linaria/core";
import { Button, Form, Input } from "ant-design-vue";
import { Rule } from "ant-design-vue/lib/form";
import { queenApi } from "queenjs";
import { defineComponent, reactive, ref } from "vue";
import { object } from "vue-types";
import Thumbnail from "./Thumbnail";

const layout = {
  labelCol: { span: 6 },
  wrapperCol: { span: 16 },
};

export default defineComponent({
  props: {
    data: object<IStyle>(),
  },
  setup(props) {
    const modal = queenApi.useDialog();

    const formRef = ref();

    const formState = reactive({
      scenePack: props.data?.scenePack || {},
      name: props.data?.name || "",
    });

    const checkPack = async (_rule: Rule, value: any) => {
      if (!value._id) {
        return Promise.reject("款式不能为空");
      } else {
        return Promise.resolve();
      }
    };

    const submit = async () => {
      const values = await formRef.value?.validateFields();
      values.thumbnail = values.scenePack.thumbnail;
      modal.submit(values);
    };

    return () => {
      return (
        <div class={modalStyle}>
          <Form {...layout} ref={formRef} model={formState}>
            <Form.Item
              name="scenePack"
              label="选择款式"
              rules={[{ validator: checkPack, trigger: "change" }]}
            >
              <Thumbnail v-model={[formState.scenePack, "value"]} />
            </Form.Item>
            <Form.Item
              name="name"
              label="款式名"
              rules={[{ required: true, message: "款式不能为空" }]}
            >
              <Input
                v-model={[formState.name, "value"]}
                placeholder="请输入款式名"
              />
            </Form.Item>
            <Form.Item class="text-center" wrapperCol={{ span: 24 }}>
              <Button onClick={() => modal.cancel()}>取消</Button>
              <Button type="primary" class="ml-10px" onClick={submit}>
                确定
              </Button>
            </Form.Item>
          </Form>
        </div>
      );
    };
  },
});

const modalStyle = css`
  .content {
    padding-top: 20px;
    padding-bottom: 10px;
    text-align: left;
  }

  .footer {
    margin-bottom: 0;
    text-align: right;
  }
`;