import { Cid } from '@atproto/lex-data'

export class MissingBlockError extends Error {
  constructor(
    public cid: Cid,
    def?: string,
  ) {
    let msg = `block not found: ${cid.toString()}`
    if (def) {
      msg += `, expected type: ${def}`
    }
    super(msg)
  }
}

export class MissingBlocksError extends Error {
  constructor(
    public context: string,
    public cids: Cid[],
  ) {
    const cidStr = cids.map((c) => c.toString())
    super(`missing ${context} blocks: ${cidStr}`)
  }
}

export class MissingCommitBlocksError extends Error {
  constructor(
    public commit: Cid,
    public cids: Cid[],
  ) {
    const cidStr = cids.map((c) => c.toString())
    super(`missing blocks for commit ${commit.toString()}: ${cidStr}`)
  }
}

export class UnexpectedObjectError extends Error {
  constructor(
    public cid: Cid,
    public def: string,
  ) {
    super(`unexpected object at ${cid.toString()}, expected: ${def}`)
  }
}
