import { config } from '/@/config';
import { useBase } from '/$/base';
import type { AgentChannelInfo } from '../types/index.d';

/**
 * weixin-db 渠道保存前的本地校验 composable。
 *
 * 目前仅提供 wxid 唯一性查询:扫描 type=weixin-db 的渠道列表,
 * 返回第一个与传入 wxid 冲突且 id 不等于 excludeChannelId 的渠道。
 *
 * 失败策略:网络 / 鉴权错误一律返回 null(视为"没冲突"),
 * 不因前端请求失败阻塞保存流程——最终唯一性由后端 unique index 兜底。
 */
export function useDbChannelValidation() {
	const { user } = useBase();

	async function findOtherDbChannelWithWxid(
		wxid: string,
		excludeChannelId?: number | null,
	): Promise<AgentChannelInfo | null> {
		if (!wxid) return null;
		try {
			const resp = await fetch(`${config.baseUrl}/admin/netaclaw/agent_channel/page`, {
				method: 'POST',
				headers: {
					'Content-Type': 'application/json',
					Authorization: user.token || '',
				},
				body: JSON.stringify({ type: 'weixin-db', size: 200 }),
			});
			if (!resp.ok) return null;
			const data = await resp.json();
			const list: AgentChannelInfo[] = data?.data?.list ?? [];
			return (
				list.find(c => {
					const cid = c.id ?? null;
					if (excludeChannelId != null && cid === excludeChannelId) return false;
					return ((c.credential as any)?.wxid ?? '') === wxid;
				}) ?? null
			);
		} catch {
			return null;
		}
	}

	return { findOtherDbChannelWithWxid };
}
