import { describe, expect, it } from 'vitest';
import { pickStartupSessionFallback } from '@/stores/chat/session-selection';
import type { ChatSession } from '@/stores/chat/types';

describe('pickStartupSessionFallback', () => {
  it('prefers the agent main session when present', () => {
    const sessions: ChatSession[] = [
      { key: 'agent:main:cron:heartbeat', label: 'heartbeat', updatedAt: 9_000 },
      { key: 'agent:main:main', displayName: 'Main', updatedAt: 1_000 },
    ];

    expect(pickStartupSessionFallback('agent:main:main', sessions)).toBe('agent:main:main');
  });

  it('prefers the most recently updated non-cron session for the agent', () => {
    const sessions: ChatSession[] = [
      { key: 'agent:main:cron:heartbeat', label: 'heartbeat', updatedAt: 9_000 },
      { key: 'agent:main:session-old', updatedAt: 2_000 },
      { key: 'agent:main:session-new', updatedAt: 5_000 },
    ];

    expect(pickStartupSessionFallback('agent:main:main', sessions)).toBe('agent:main:session-new');
  });

  it('does not auto-select cron sessions when only cron entries exist', () => {
    const sessions: ChatSession[] = [
      { key: 'agent:main:cron:heartbeat', label: 'heartbeat', updatedAt: 9_000 },
    ];

    expect(pickStartupSessionFallback('agent:main:main', sessions)).toBeNull();
  });

  it('falls back to non-cron sessions from other agents before cron', () => {
    const sessions: ChatSession[] = [
      { key: 'agent:main:cron:heartbeat', updatedAt: 9_000 },
      { key: 'agent:research:desk', updatedAt: 3_000 },
    ];

    expect(pickStartupSessionFallback('agent:main:main', sessions)).toBe('agent:research:desk');
  });
});