<template>
    <div>
        <t-form labelAlign="left">
            <t-form-item label="启用">
                <t-switch v-model="config.enable" />
            </t-form-item>
            <t-form-item label="主机">
                <t-input v-model="config.host" />
            </t-form-item>
            <t-form-item label="端口">
                <t-input v-model.number="config.port" type="number" />
            </t-form-item>
            <t-form-item label="消息格式">
                <t-select v-model="config.messagePostFormat" :options="messageFormatOptions" />
            </t-form-item>
            <t-form-item label="上报自身消息">
                <t-switch v-model="config.reportSelfMessage" />
            </t-form-item>
            <t-form-item label="Token">
                <t-input v-model="config.token" />
            </t-form-item>
            <t-form-item label="强制推送事件">
                <t-switch v-model="config.enableForcePushEvent" />
            </t-form-item>
            <t-form-item label="调试模式">
                <t-switch v-model="config.debug" />
            </t-form-item>
            <t-form-item label="心跳间隔">
                <t-input v-model.number="config.heartInterval" type="number" />
            </t-form-item>
        </t-form>
    </div>
</template>

<script setup lang="ts">
import { ref, watch } from 'vue';
import { WebsocketServerConfig } from '../../../../src/onebot/config/config';

const defaultConfig: WebsocketServerConfig = {
    name: 'websocket-server',
    enable: false,
    host: '0.0.0.0',
    port: 3001,
    messagePostFormat: 'array',
    reportSelfMessage: false,
    token: '',
    enableForcePushEvent: true,
    debug: false,
    heartInterval: 30000
};

const props = defineProps<{
    config: WebsocketServerConfig;
}>();

const config = ref(Object.assign({}, defaultConfig, props.config));

const messageFormatOptions = ref([
    { label: 'Array', value: 'array' },
    { label: 'String', value: 'string' },
]);

watch(
    () => config.value.messagePostFormat,
    (newValue) => {
        if (newValue !== 'array' && newValue !== 'string') {
            config.value.messagePostFormat = 'array';
        }
    }
);
</script>

<style scoped></style>