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

interface GeoPointProps {
  latitude: number;
  longitude: number;
}

export class GeoPoint extends ValueObject<GeoPointProps> {
  get latitude(): number { return this.props.latitude; }
  get longitude(): number { return this.props.longitude; }

  static create(latitude: number, longitude: number): Result<GeoPoint, string> {
    if (latitude < -90 || latitude > 90) {
      return Result.err('Vĩ độ phải nằm trong khoảng -90 đến 90');
    }
    if (longitude < -180 || longitude > 180) {
      return Result.err('Kinh độ phải nằm trong khoảng -180 đến 180');
    }
    return Result.ok(new GeoPoint({ latitude, longitude }));
  }

  toWKT(): string {
    return `POINT(${this.props.longitude} ${this.props.latitude})`;
  }
}
