<script setup lang="ts">
import { NModal, NTable, NTag, NButton, NInput, useMessage } from 'naive-ui';
import { useChatStore, type SydneyConfig } from '@/stores/modules/chat';
import { storeToRefs } from 'pinia';

const chatStore = useChatStore();
const { isShowChatServiceSelectModal, sydneyConfigs, selectedSydneyBaseUrl } = storeToRefs(chatStore);

const message = useMessage();

const checkSydneyConfig = async (config: SydneyConfig) => {
  config.isUsable = undefined;
  config.delay = undefined;
  const checkResult = await chatStore.checkSydneyConfig(config);
  if (checkResult.errorMsg) {
    message.error(checkResult.errorMsg);
  }
  config.isUsable = checkResult.isUsable;
  config.delay = checkResult.delay;
};

const selectSydneyConfig = (config: SydneyConfig) => {
  selectedSydneyBaseUrl.value = config.baseUrl;
  CIB.config.sydney.baseUrl = config.baseUrl;
  isShowChatServiceSelectModal.value = false;
};

const handleChangeSydneyConfig = (config: SydneyConfig) => {
  if (!config.baseUrl) {
    return;
  }
  if (!config.baseUrl.startsWith('https://')) {
    message.error('请填写 https 开头的正确链接');
    return;
  }
  return checkSydneyConfig(config);
};
</script>

<template>
  <NModal class="w-11/12 lg:w-[900px]" v-model:show="isShowChatServiceSelectModal" preset="card" title="聊天服务器设置">
    <NTable striped>
      <tbody>
        <tr v-for="(config, index) in sydneyConfigs" :key="index">
          <td>
            <span v-if="config.isCus" class="hidden lg:block">{{ config.label }}</span>
            <span v-else>{{ config.label }}</span>
            <NInput class="lg:hidden" v-if="config.isCus" v-model:value="config.baseUrl" placeholder="自定义聊天服务器链接" @change="handleChangeSydneyConfig(config)"></NInput>
          </td>
          <td class="hidden lg:table-cell">
            <NInput v-if="config.isCus" v-model:value="config.baseUrl" placeholder="自定义聊天服务器链接" @change="handleChangeSydneyConfig(config)"></NInput>
            <span v-else>{{ config.baseUrl }}</span>
          </td>
          <td>
            <div v-if="config.baseUrl && config.isUsable === undefined && config.delay === undefined" class="flex justify-center items-center flex-wrap gap-2">
              <NButton tertiary :loading="true" size="small" type="info"></NButton>
            </div>
            <div v-else-if="config.baseUrl" class="flex justify-center items-center flex-wrap gap-2" @click="checkSydneyConfig(config)">
              <NTag v-if="config.isUsable === false" type="error" class="cursor-pointer">不可用</NTag>
              <NTag v-if="config.delay" type="success" class="cursor-pointer">{{ config.delay }} ms</NTag>
            </div>
          </td>
          <td>
            <div class="flex justify-center items-center flex-wrap gap-2">
              <NButton class="hidden lg:table-cell" secondary @click="checkSydneyConfig(config)">检测</NButton>
              <NButton v-if="config.baseUrl === selectedSydneyBaseUrl" secondary type="success">当前</NButton>
              <NButton v-else secondary type="info" @click="selectSydneyConfig(config)">选择</NButton>
            </div>
          </td>
        </tr>
      </tbody>
    </NTable>
  </NModal>
</template>
