package com.grigowashere.aismap.maps;

import com.grigowashere.aismap.models.Vessel;
import com.grigowashere.aismap.models.AISVessel;

/**
 * Интерфейс для управления маркерами на карте
 * Отделяет логику управления маркерами от конкретной реализации карты
 */
public interface MarkerManager {
    
    /**
     * Инициализация менеджера маркеров
     */
    void initialize();
    
    /**
     * Очистка ресурсов менеджера маркеров
     */
    void cleanup();
    
    /**
     * Добавление или обновление маркера нашего судна
     */
    void updateOwnVesselMarker(Vessel vessel);
    
    /**
     * Добавление или обновление маркера AIS судна
     */
    void updateAISVesselMarker(AISVessel vessel);
    
    /**
     * Удаление маркера AIS судна
     */
    void removeAISVesselMarker(String mmsi);
    
    /**
     * Очистка всех AIS маркеров
     */
    void clearAISVesselMarkers();
    
    /**
     * Установка обработчика кликов по маркерам
     */
    void setMarkerClickListener(MapInterface.MarkerClickListener listener);
    
    /**
     * Обновление всех маркеров (например, при повороте карты)
     */
    void refreshAllMarkers();
    
    /**
     * Проверка и восстановление финализированных маркеров
     */
    void checkAndRestoreMarkers();
    
    /**
     * Получение количества активных маркеров
     */
    int getActiveMarkerCount();
    
    /**
     * Включает/выключает отображение путей движения
     */
    void setPathTrackingEnabled(boolean enabled);
    
    /**
     * Очищает путь конкретного судна
     */
    void clearVesselPath(String mmsi);
    
    /**
     * Очищает все пути движения
     */
    void clearAllPaths();
    
    /**
     * Обновляет настройки отображения путей
     */
    void updatePathSettings(int pathColor, int predictionColor, float pathWidth, float predictionWidth);
}
