org/OrganizationMessages.ts

Summary

Maintainability
A
30 mins
Test Coverage
import { RR0SsgContext } from "../RR0SsgContext"
import assert from "assert"
import { Organization } from "./Organization"

export interface OrganizationMessageOptions {
  parent: boolean
}

export class OrganizationMessages {
  readonly titles: string[]

  /**
   *
   * @param {string[]} titles The raw title.
   * @see toTitle() for more complex title strings.
   */
  constructor(...titles: string[]) {
    this.titles = titles
  }

  get title(): string {
    return this.titles[0]
  }

  toTitle(context: RR0SsgContext, org: Organization, options: OrganizationMessageOptions): string {
    const orgMessages = org.getMessages(context)
    assert.ok(orgMessages,
      `Could not find name of city with ZIP code "${org.id}" in departement "${org.parent?.id}"`)
    let title = orgMessages.title
    return this.toTitleFromName(context, org, title, options)
  }

  toTitleFromName(context: RR0SsgContext, org: Organization, title: string, options: OrganizationMessageOptions) {
    let str = org.getMessages(context).cityName(title)
    if (options.parent) {
      const parent = org.parent
      if (parent) {
        const depMessages = parent.getMessages(context)
        str += ` (${depMessages.toTitle(context, parent, options)})`
      }
    }
    return str
  }

  cityName(cityStr: string): string {
    return cityStr.trim()
  }
}