///|
/// One offline IANA HTTP Problem Types registration.
pub struct ProblemTypeRecord {
  type_uri : String
  title : String
  recommended_status : Int?
  reference : String
} derive(Eq, Debug)

///|
pub fn problem_type_record(
  type_uri : String,
  title : String,
  recommended_status : Int?,
  reference : String,
) -> ProblemTypeRecord {
  { type_uri, title, recommended_status, reference }
}

///|
pub fn ProblemTypeRecord::type_uri(self : ProblemTypeRecord) -> String {
  self.type_uri
}

///|
pub fn ProblemTypeRecord::title(self : ProblemTypeRecord) -> String {
  self.title
}

///|
pub fn ProblemTypeRecord::recommended_status(self : ProblemTypeRecord) -> Int? {
  self.recommended_status
}

///|
pub fn ProblemTypeRecord::reference(self : ProblemTypeRecord) -> String {
  self.reference
}

///|
pub fn registered_problem_types() -> Array[ProblemTypeRecord] {
  generated_problem_type_data()
}

///|
pub fn lookup_problem_type(uri : String) -> ProblemTypeRecord? {
  for record in generated_problem_type_data() {
    if record.type_uri() == uri {
      return Some(record)
    }
  }
  None
}

///|
pub fn is_registered_problem_type(uri : String) -> Bool {
  lookup_problem_type(uri) is Some(_)
}

///|
pub fn registry_snapshot_sha256() -> String {
  "5ad50e00f53a1d444fdf82c4d72d022621cd85c277dbaae5f9438874711985e9"
}

///|
pub fn registry_snapshot_date() -> String {
  "2026-06-26"
}