package com.grigowashere.aismap.utils;

/**
 * Утилиты для навигационных вычислений
 * Теперь использует GeoUtils для базовых геодезических расчетов
 */
public class NavigationUtils {
    
    /**
     * Вычисляет расстояние между двумя точками на Земле (формула гаверсинуса)
     * @param lat1 широта первой точки в градусах
     * @param lon1 долгота первой точки в градусах
     * @param lat2 широта второй точки в градусах
     * @param lon2 долгота второй точки в градусах
     * @return расстояние в метрах
     */
    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
        // Проверяем валидность координат
        if (!GeoUtils.isValidCoordinates(lat1, lon1) || !GeoUtils.isValidCoordinates(lat2, lon2)) {
            return -1;
        }
        
        return GeoUtils.calculateDistance(lat1, lon1, lat2, lon2);
    }
    
    /**
     * Вычисляет азимут (bearing) от первой точки ко второй
     * @param lat1 широта первой точки в градусах
     * @param lon1 долгота первой точки в градусах
     * @param lat2 широта второй точки в градусах
     * @param lon2 долгота второй точки в градусах
     * @return азимут в градусах (0-360)
     */
    public static double calculateBearing(double lat1, double lon1, double lat2, double lon2) {
        // Проверяем валидность координат
        if (!GeoUtils.isValidCoordinates(lat1, lon1) || !GeoUtils.isValidCoordinates(lat2, lon2)) {
            return -1;
        }
        
        return GeoUtils.calculateBearing(lat1, lon1, lat2, lon2);
    }
    
    /**
     * Вычисляет относительный азимут (сколько градусов влево/вправо от нашего курса)
     * @param ourCourse наш курс в градусах (0-360)
     * @param targetBearing азимут до цели в градусах (0-360)
     * @return относительный азимут в градусах (-180 до +180, отрицательное = влево, положительное = вправо)
     */
    public static double calculateRelativeBearing(double ourCourse, double targetBearing) {
        return GeoUtils.calculateRelativeBearing(ourCourse, targetBearing);
    }
    
    /**
     * Форматирует расстояние для отображения
     * @param distanceMeters расстояние в метрах
     * @return отформатированная строка
     */
    public static String formatDistance(double distanceMeters) {
        return GeoUtils.formatDistance(distanceMeters);
    }
    
    /**
     * Форматирует относительный азимут для отображения
     * @param relativeBearing относительный азимут в градусах
     * @return отформатированная строка
     */
    public static String formatRelativeBearing(double relativeBearing) {
        return GeoUtils.formatRelativeBearing(relativeBearing);
    }
}
