import { Result, ValueObject } from '@modules/shared';

interface AddressProps {
  address: string;
  ward: string;
  district: string;
  city: string;
}

export class Address extends ValueObject<AddressProps> {
  get address(): string { return this.props.address; }
  get ward(): string { return this.props.ward; }
  get district(): string { return this.props.district; }
  get city(): string { return this.props.city; }

  get fullAddress(): string {
    return `${this.props.address}, ${this.props.ward}, ${this.props.district}, ${this.props.city}`;
  }

  static create(address: string, ward: string, district: string, city: string): Result<Address, string> {
    if (!address?.trim()) return Result.err('Địa chỉ không được để trống');
    if (!ward?.trim()) return Result.err('Phường/xã không được để trống');
    if (!district?.trim()) return Result.err('Quận/huyện không được để trống');
    if (!city?.trim()) return Result.err('Thành phố không được để trống');

    return Result.ok(new Address({
      address: address.trim(),
      ward: ward.trim(),
      district: district.trim(),
      city: city.trim(),
    }));
  }
}
