import { Card, TextField, Label } from "./components.js";

const DownloadShortcode = {
  label: "Download-Karte",
  openTag: "{{< ",
  closeTag: " >}}",
  separator: " ",
  toProps: (args) => {
    if (args.length > 0) {
      var title = "";
      var link = "";
      const linkIndex = args.findIndex((arg) => arg.startsWith('link="'));
      const titleIndex = args.findIndex((arg) => arg.startsWith('title="'));
      for (let arg of args.slice(titleIndex, linkIndex)) {
        title += " " + arg.replaceAll("title=", "").replaceAll('"', "");
      }
      for (let arg of args.slice(linkIndex)) {
        link += " " + arg.replaceAll("link=", "").replaceAll('"', "");
      }
      return { title: title.trimStart(), link: link.trim() };
    }

    return { title: "", link: "" };
  },
  toArgs: ({ title, link }) => {
    return [`title=\"${title}\"`, `link=\"${link}\"`];
  },
  control: ({ title, link, onChange, controlProps }) => {
    const { collection, field } = controlProps;

    const handleChange = ({ path }) => {
      onChange({ title: title, link: path });
    };

    const handleOpenMediaLibrary = useMediaInsert(
      link,
      { collection, field },
      handleChange
    );

    return Card([
      Label("Titel"),
      TextField({
        value: title,
        onChange: (event) => {
          onChange({ title: event.target.value.trimStart(), link });
        },
      }),
      Label("Download-Link"),
      h(
        "span",
        {
          class: "CMS_WidgetDateTime_inputs"
        },
        TextField({
          value: link,
          onChange: (event) => {
            onChange({ title, link: event.target.value });
          },
        }),
        h(
          "button",
          {
            type: "button",
            onClick: handleOpenMediaLibrary,
            className: "CMS_Button_root CMS_Button_outlined-primary",
            style: { "margin-left": "0.75rem", "margin-right": "0.75rem" },
          },
          "wählen"
        )
      ),
    ]);
  },
  preview: ({ title, link }) => {
    return h(
      "div",
      { className: "card border-primary rounded-0 hover-shadow mb-2" },
      h(
        "div",
        { className: "card-body mb-0" },
        h(
          "h4",
          { className: "card-title" },
          h("a", { className: "text-decoration-none", href: link }, title)
        ),
        h(
          "a",
          {
            className: "mb-0 btn btn-primary btn-sm text-decoration-none",
            href: link,
          },
          h("i", { className: "mdi mdi-tray-arrow-down mb-0 me-2" }),
          "Download"
        )
      )
    );
  },
};

export default DownloadShortcode;