using ScadaLink.Commons.Entities.Instances;
using ScadaLink.Commons.Entities.Sites;
namespace ScadaLink.Commons.Interfaces.Repositories;
///
/// Repository interface for site and data connection management.
///
public interface ISiteRepository
{
// Sites
Task GetSiteByIdAsync(int id, CancellationToken cancellationToken = default);
Task GetSiteByIdentifierAsync(string siteIdentifier, CancellationToken cancellationToken = default);
Task> GetAllSitesAsync(CancellationToken cancellationToken = default);
Task AddSiteAsync(Site site, CancellationToken cancellationToken = default);
Task UpdateSiteAsync(Site site, CancellationToken cancellationToken = default);
Task DeleteSiteAsync(int id, CancellationToken cancellationToken = default);
// Data Connections
Task GetDataConnectionByIdAsync(int id, CancellationToken cancellationToken = default);
Task> GetAllDataConnectionsAsync(CancellationToken cancellationToken = default);
Task> GetDataConnectionsBySiteIdAsync(int siteId, CancellationToken cancellationToken = default);
Task AddDataConnectionAsync(DataConnection connection, CancellationToken cancellationToken = default);
Task UpdateDataConnectionAsync(DataConnection connection, CancellationToken cancellationToken = default);
Task DeleteDataConnectionAsync(int id, CancellationToken cancellationToken = default);
// Instances (for deletion constraint checks)
Task> GetInstancesBySiteIdAsync(int siteId, CancellationToken cancellationToken = default);
Task SaveChangesAsync(CancellationToken cancellationToken = default);
}