/// 우편번호 검색 결과의 도메인 모델.
///
/// - `zipcode`: 5자리 우편번호.
/// - `sido`/`sigungu`: 시도 및 시군구 행정 구역.
/// - `roadName`: 도로명 주소 구성 요소.
/// - `buildingMainNo`/`buildingSubNo`: 건물 번호 본번/부번(없으면 null).
class PostalCode {
  PostalCode({
    required this.zipcode,
    this.sido,
    this.sigungu,
    this.roadName,
    this.buildingMainNo,
    this.buildingSubNo,
  });

  final String zipcode;
  final String? sido;
  final String? sigungu;
  final String? roadName;
  final int? buildingMainNo;
  final int? buildingSubNo;

  /// 건물 번호 문자열을 반환한다. 본번만 존재하면 해당 값만 반환한다.
  String get buildingNumber {
    final main = buildingMainNo;
    final sub = buildingSubNo;
    if (main == null) {
      return '';
    }
    if (sub == null || sub == 0) {
      return '$main';
    }
    return '$main-$sub';
  }
}
