import { describe, test, expect, beforeEach } from 'vitest';
import { openDatabase } from '@insta-monitor/db';
import type { Database } from '@insta-monitor/db';
import type { ScrapedProfile } from '@insta-monitor/collector';
import { autoCollectUsernames, collectAuto } from './index.js';
import type { ProfileSource } from './index.js';

const emptyProfile = (username: string): ScrapedProfile => ({
  username,
  displayName: username,
  followerCount: 0,
  postCount: 0,
  posts: [],
});

const source: ProfileSource = { collectProfile: async (u) => emptyProfile(u) };
const opts = { date: '2026-02-05', collectedAt: '2026-02-05T11:00:00Z' };

let db: Database;
beforeEach(() => {
  db = openDatabase(':memory:');
});

describe('autoCollectUsernames', () => {
  test('returns only accounts with auto-collect enabled', () => {
    const a = db.accounts.create({ username: 'on1' });
    db.accounts.create({ username: 'off1' });
    const c = db.accounts.create({ username: 'on2' });
    db.accounts.setAutoCollect(a, true);
    db.accounts.setAutoCollect(c, true);

    expect(autoCollectUsernames(db).sort()).toEqual(['on1', 'on2']);
  });
});

describe('collectAuto', () => {
  test('collects only the auto-collect accounts', async () => {
    const a = db.accounts.create({ username: 'on1' });
    db.accounts.create({ username: 'off1' });
    db.accounts.setAutoCollect(a, true);

    const results = await collectAuto(db, source, opts);

    expect(results.map((r) => r.username)).toEqual(['on1']);
    expect(results[0]!.status).toBe('ok');
  });
});
