import { cli, Strategy } from '@jackwener/opencli/registry';
import { EmptyResultError } from '@jackwener/opencli/errors';
import { DOMAIN, SITE, gqlRequest, resolveTagId } from './_helpers.js';
cli({
    site: SITE,
    name: 'tag',
    access: 'read',
    description: 'Posts by tag',
    domain: DOMAIN,
    strategy: Strategy.PUBLIC,
    browser: false,
    args: [
        {
            name: 'tag',
            type: 'string',
            required: true,
            positional: true,
            help: 'Tag slug or name',
        },
        { name: 'limit', type: 'int', default: 10, help: 'Number of results' },
    ],
    columns: ['rank', 'title', 'author', 'karma', 'comments', 'url'],
    func: async (kwargs) => {
        const tagInput = String(kwargs.tag);
        const limit = Number(kwargs.limit ?? 10);
        const tag = await resolveTagId(tagInput);
        if (!tag?._id) {
            throw new EmptyResultError(`lesswrong tag ${tagInput}`, 'Use "opencli lesswrong tags" to list available tags');
        }
        const query = `query PostsByTag {
      posts(input: {terms: {view: "tagRelevance", tagId: "${tag._id}", limit: ${limit}}}) {
        results { _id title user { displayName } baseScore commentCount slug postedAt }
      }
    }`;
        const data = await gqlRequest(query);
        const posts = (data?.posts?.results ?? []);
        return posts.map((item, i) => ({
            rank: i + 1,
            title: item.title ?? '',
            author: item.user?.displayName ?? '',
            karma: item.baseScore ?? 0,
            comments: item.commentCount ?? 0,
            url: `https://${DOMAIN}/posts/${item._id}/${item.slug}`,
        }));
    },
});
