import { Divider, Input, Switch } from "antd"
import { useTranslation } from "react-i18next"
import { Form } from "antd"
import React from "react"
import {
  customOllamaHeaders,
  getIsAutoCORSFix,
  getRewriteUrl,
  isUrlRewriteEnabled,
  setAutoCORSFix,
  setCustomOllamaHeaders,
  setRewriteUrl,
  setUrlRewriteEnabled
} from "@/services/app"
import { Trash2Icon } from "lucide-react"
import { SaveButton } from "../SaveButton"

export const AdvanceOllamaSettings = () => {
  const [form] = Form.useForm()
  const watchUrlRewriteEnabled = Form.useWatch("urlRewriteEnabled", form)
  const { t } = useTranslation("settings")

  const fetchAdvancedData = async () => {
    try {
      const [urlRewriteEnabled, rewriteUrl, headers, autoCORSFix] =
        await Promise.all([
          isUrlRewriteEnabled(),
          getRewriteUrl(),
          customOllamaHeaders(),
          getIsAutoCORSFix()
        ])
      form.setFieldsValue({
        urlRewriteEnabled,
        rewriteUrl,
        headers,
        autoCORSFix
      })
    } catch (e) {
      console.error(e)
    }
  }

  React.useEffect(() => {
    fetchAdvancedData()
  }, [])

  return (
    <Form
      onFinish={(e) => {
        const headers = e?.headers?.filter(
          (header: { key: string; value: string }) => header.key && header.value
        )
        setUrlRewriteEnabled(e.urlRewriteEnabled)
        setRewriteUrl(e.rewriteUrl)
        setCustomOllamaHeaders(headers)
        setAutoCORSFix(e.autoCORSFix)
      }}
      form={form}
      layout="vertical"
      className="space-y-4">
      <Form.Item
        name="urlRewriteEnabled"
        label={t("ollamaSettings.settings.advanced.urlRewriteEnabled.label")}>
        <Switch />
      </Form.Item>
      <Form.Item
        required={watchUrlRewriteEnabled}
        name="rewriteUrl"
        label={t("ollamaSettings.settings.advanced.rewriteUrl.label")}>
        <Input
          disabled={!watchUrlRewriteEnabled}
          className="w-full"
          placeholder={t(
            "ollamaSettings.settings.advanced.rewriteUrl.placeholder"
          )}
        />
      </Form.Item>

      <Form.Item
        name="autoCORSFix"
        label={t("ollamaSettings.settings.advanced.autoCORSFix.label")}>
        <Switch />
      </Form.Item>

      <Form.List name="headers">
        {(fields, { add, remove }) => (
          <div className="flex flex-col ">
            <div className="flex justify-between items-center">
              <h3 className="text-md font-semibold">
                {t("ollamaSettings.settings.advanced.headers.label")}
              </h3>
              <button
                type="button"
                className="dark:bg-white dark:text-black text-white bg-black p-1.5 text-xs rounded-md"
                onClick={() => {
                  add()
                }}>
                {t("ollamaSettings.settings.advanced.headers.add")}
              </button>
            </div>
            {fields.map((field, index) => (
              <div key={field.key} className="flex items-center   w-full">
                <div className="flex-grow flex mt-3 space-x-4">
                  <Form.Item
                    label={t(
                      "ollamaSettings.settings.advanced.headers.key.label"
                    )}
                    name={[field.name, "key"]}
                    className="flex-1 mb-0">
                    <Input
                      className="w-full"
                      placeholder={t(
                        "ollamaSettings.settings.advanced.headers.key.placeholder"
                      )}
                    />
                  </Form.Item>
                  <Form.Item
                    label={t(
                      "ollamaSettings.settings.advanced.headers.value.label"
                    )}
                    name={[field.name, "value"]}
                    className="flex-1 mb-0">
                    <Input
                      className="w-full"
                      placeholder={t(
                        "ollamaSettings.settings.advanced.headers.value.placeholder"
                      )}
                    />
                  </Form.Item>
                </div>
                <button
                  type="button"
                  onClick={() => {
                    remove(field.name)
                  }}
                  className="shrink-0 ml-2 text-red-500 dark:text-red-400">
                  <Trash2Icon className="w-5 h-5" />
                </button>
              </div>
            ))}
          </div>
        )}
      </Form.List>
      <Divider />

      <Form.Item className="flex justify-end">
        <SaveButton btnType="submit" />
      </Form.Item>
    </Form>
  )
}
