import { cli, Strategy } from '@jackwener/opencli/registry';
import { apiGet, stripHtml } from './utils.js';
cli({
    site: 'bilibili', name: 'search', access: 'read', description: 'Search Bilibili videos or users', domain: 'www.bilibili.com', strategy: Strategy.COOKIE,
    args: [
        { name: 'query', required: true, positional: true, help: 'Search keyword' },
        { name: 'type', default: 'video', help: 'video or user' },
        { name: 'page', type: 'int', default: 1, help: 'Result page' },
        { name: 'limit', type: 'int', default: 20, help: 'Number of results' },
    ],
    columns: ['rank', 'title', 'author', 'score', 'url'],
    func: async (page, kwargs) => {
        const { query: keyword, type = 'video', page: pageNum = 1, limit = 20 } = kwargs;
        const searchType = type === 'user' ? 'bili_user' : 'video';
        const payload = await apiGet(page, '/x/web-interface/wbi/search/type', { params: { search_type: searchType, keyword, page: pageNum }, signed: true });
        const results = payload?.data?.result ?? [];
        return results.slice(0, Number(limit)).map((item, i) => {
            if (searchType === 'bili_user') {
                return { rank: i + 1, title: stripHtml(item.uname ?? ''), author: (item.usign ?? '').trim(), score: item.fans ?? 0, url: item.mid ? `https://space.bilibili.com/${item.mid}` : '' };
            }
            return { rank: i + 1, title: stripHtml(item.title ?? ''), author: item.author ?? '', score: item.play ?? 0, url: item.bvid ? `https://www.bilibili.com/video/${item.bvid}` : '' };
        });
    },
});
