package com.grigowashere.aismap.maps;

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

/**
 * Интерфейс для работы с картами
 * Позволяет использовать разные SDK карт
 */
public interface MapInterface {
    
    /**
     * Инициализация карты
     */
    void initialize();
    
    /**
     * Очистка ресурсов карты
     */
    void cleanup();
    
    /**
     * Добавление метки нашего судна
     */
    void addOwnVesselMarker(Vessel vessel);
    
    /**
     * Обновление позиции нашего судна
     */
    void updateOwnVesselPosition(Vessel vessel);
    
    /**
     * Добавление метки AIS судна
     */
    void addAISVesselMarker(AISVessel vessel);
    
    /**
     * Обновление позиции AIS судна
     */
    void updateAISVesselPosition(AISVessel vessel);
    
    /**
     * Удаление метки AIS судна
     */
    void removeAISVesselMarker(String mmsi);
    
    /**
     * Очистка всех AIS меток
     */
    void clearAISVesselMarkers();
    
    /**
     * Центрирование карты на позиции
     */
    void centerOnPosition(double latitude, double longitude);
    
    /**
     * Установка зума карты
     */
    void setZoom(float zoom);
    
    /**
     * Получение текущего зума
     */
    float getZoom();
    
    /**
     * Добавление дополнительного слоя
     */
    void addLayer(String layerId, Object layerData);
    
    /**
     * Удаление слоя
     */
    void removeLayer(String layerId);
    
    /**
     * Установка обработчика кликов по меткам
     */
    void setMarkerClickListener(MarkerClickListener listener);
    
    /**
     * Интерфейс для обработки кликов по меткам
     */
    interface MarkerClickListener {
        void onOwnVesselClick(Vessel vessel);
        void onAISVesselClick(AISVessel vessel);
    }
}
