import { discoverFeedUrl } from './discover.ts';
import { fetchFeed, isNotModified } from './fetcher.ts';
import { parseFeed } from './parser.ts';
import { normalizeFeed } from './normalizer.ts';

async function main(): Promise<void> {
  const input = process.argv[2];
  if (!input) {
    console.error('usage: node cli.ts <url>');
    process.exit(2);
  }
  const feedUrl = await discoverFeedUrl(input);
  const res = await fetchFeed(feedUrl);
  if (isNotModified(res)) {
    console.log(JSON.stringify({ url: feedUrl, status: 304, items: [] }, null, 2));
    return;
  }
  const parsed = parseFeed(res.body, res.contentType);
  const normalized = normalizeFeed(parsed, res.url, new Date().toISOString());
  console.log(
    JSON.stringify({ url: res.url, title: normalized.title, items: normalized.items }, null, 2),
  );
}

main().catch((e: Error) => {
  console.error(e.message || e);
  process.exit(1);
});
