import { SessionEntry } from '../types'
import { SessionStore } from './store'

export class SessionValidator {
  private store: SessionStore

  constructor(store: SessionStore) {
    this.store = store
  }

  validate(channelId: string, cardId: string): SessionEntry {
    const entry = this.store.get(cardId)
    if (!entry) {
      throw new Error(`Sessão não encontrada para o card "${cardId}".`)
    }
    if (entry.slack_channel_id !== channelId) {
      throw new Error(
        `Canal "${channelId}" não corresponde à sessão do card "${cardId}".`
      )
    }
    return entry
  }

  validateOwner(
    userId: string,
    entry: SessionEntry,
    adminIds: string[]
  ): boolean {
    return userId === entry.owner_user_id || adminIds.includes(userId)
  }

  getCardIdFromChannel(channelId: string): string | undefined {
    const entry = this.store.findByChannelId(channelId)
    return entry?.card_id
  }
}
