using SatelliteProvider.DataAccess.Models;

namespace SatelliteProvider.DataAccess.Repositories;

public interface IRouteRepository
{
    Task<RouteEntity?> GetByIdAsync(Guid id);
    Task<IEnumerable<RoutePointEntity>> GetRoutePointsAsync(Guid routeId);
    Task<Guid> InsertRouteAsync(RouteEntity route);
    Task InsertRoutePointsAsync(IEnumerable<RoutePointEntity> points);
    Task<int> UpdateRouteAsync(RouteEntity route);
    Task<int> DeleteRouteAsync(Guid id);
    Task LinkRouteToRegionAsync(Guid routeId, Guid regionId, bool isGeofence = false, int? geofencePolygonIndex = null);
    Task<IEnumerable<Guid>> GetRegionIdsByRouteAsync(Guid routeId);
    Task<IEnumerable<Guid>> GetGeofenceRegionIdsByRouteAsync(Guid routeId);
    Task<Dictionary<int, List<Guid>>> GetGeofenceRegionsByPolygonAsync(Guid routeId);
    Task<IEnumerable<RouteEntity>> GetRoutesWithPendingMapsAsync();
}

