import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import {
  geofenceDepartureRadiusMeters,
  geofenceRadiusMeters,
} from '../config/runtime-config';
import { isWithinRadiusMeters, type LatLng } from '../common/utils/geo.util';

@Injectable()
export class GeofencingService {
  constructor(private readonly config: ConfigService) {}

  arrivalRadiusMeters(): number {
    return geofenceRadiusMeters(this.config);
  }

  departureRadiusMeters(): number {
    return geofenceDepartureRadiusMeters(this.config);
  }

  canArrive(current: LatLng, destination: LatLng): boolean {
    return isWithinRadiusMeters(
      current,
      destination,
      this.arrivalRadiusMeters(),
    );
  }

  canDepart(current: LatLng, origin: LatLng): boolean {
    return isWithinRadiusMeters(
      current,
      origin,
      this.departureRadiusMeters(),
    );
  }

  shouldAutoArrive(
    current: LatLng,
    destination: LatLng,
    speed?: number,
  ): boolean {
    if (!this.canArrive(current, destination)) return false;
    return speed === undefined || speed < 2;
  }
}
