import { AutomationSession } from '../../packages/domain/entities/AutomationSession';
import { SessionStateValue } from '../../packages/domain/value-objects/SessionState';
import { ISessionRepository } from '../../packages/application/ports/ISessionRepository';

export class InMemorySessionRepository implements ISessionRepository {
  private sessions: Map<string, AutomationSession> = new Map();

  async save(session: AutomationSession): Promise<void> {
    this.sessions.set(session.id, session);
  }

  async findById(id: string): Promise<AutomationSession | null> {
    return this.sessions.get(id) || null;
  }

  async update(session: AutomationSession): Promise<void> {
    if (!this.sessions.has(session.id)) {
      throw new Error('Session not found');
    }
    this.sessions.set(session.id, session);
  }

  async delete(id: string): Promise<void> {
    this.sessions.delete(id);
  }

  async findAll(): Promise<AutomationSession[]> {
    return Array.from(this.sessions.values());
  }

  async findByState(state: SessionStateValue): Promise<AutomationSession[]> {
    return Array.from(this.sessions.values()).filter(
      session => session.state.value === state
    );
  }
}