package com.grigowashere.aismap.ui;

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

/**
 * Интерфейс для уведомлений UI о изменениях данных
 * Контроллеры используют этот интерфейс для информирования UI о изменениях
 * без знания деталей UI реализации
 */
public interface UIDataChangeNotifier {
    
    /**
     * Уведомление об изменении позиции собственного судна
     * @param vessel обновленные данные судна
     */
    void onVesselPositionChanged(Vessel vessel);
    
    /**
     * Уведомление об изменении качества GPS данных
     * @param vessel данные судна с обновленными GPS метаданными
     */
    void onGPSQualityChanged(Vessel vessel);
    
    /**
     * Уведомление о новой AIS судне или обновлении существующего
     * @param vessel данные AIS судна
     */
    void onAISVesselChanged(AISVessel vessel);
    
    /**
     * Уведомление об удалении AIS судна
     * @param mmsi идентификатор удаляемого судна
     */
    void onAISVesselRemoved(String mmsi);
    
    /**
     * Уведомление об изменении пути судна
     * @param mmsi идентификатор судна (null для собственного судна)
     */
    void onVesselPathChanged(String mmsi);
    
    /**
     * Уведомление о центрировании карты
     * @param latitude широта
     * @param longitude долгота
     */
    void onRequestCenterMap(double latitude, double longitude);
    
    /**
     * Уведомление об обновлении компаса
     * @param azimuth значение азимута
     */
    void onCompassUpdate(float azimuth);
}
