using CredentialManager.Models;
using CredentialManager.Services;
namespace DataConnection.CredentialManagement.Interfaces;
///
/// Interfaccia per la gestione delle credenziali integrate con DataConnection
///
public interface IDataConnectionCredentialService
{
// Database credentials
Task GetDatabaseCredentialAsync(string name);
Task GetDatabaseCredentialAsync(int id);
Task> GetAllDatabaseCredentialsAsync();
Task SaveDatabaseCredentialAsync(DatabaseCredential credential);
Task DeleteDatabaseCredentialAsync(int id);
Task DeleteDatabaseCredentialAsync(string name);
// REST API credentials
Task GetRestApiCredentialAsync(string name);
Task GetRestApiCredentialAsync(int id);
Task> GetAllRestApiCredentialsAsync();
Task SaveRestApiCredentialAsync(RestApiCredential credential);
Task DeleteRestApiCredentialAsync(int id);
Task DeleteRestApiCredentialAsync(string name);
// SAP B1 Service Layer credentials
Task GetSapB1CredentialAsync(string name);
Task GetSapB1CredentialAsync(int id);
Task> GetAllSapB1CredentialsAsync();
Task SaveSapB1CredentialAsync(SapB1ServiceLayerCredential credential);
Task DeleteSapB1CredentialAsync(int id);
Task DeleteSapB1CredentialAsync(string name);
// Salesforce credentials
Task GetSalesforceCredentialAsync(string name);
Task GetSalesforceCredentialAsync(int id);
Task> GetAllSalesforceCredentialsAsync();
Task SaveSalesforceCredentialAsync(SalesforceCredential credential);
Task DeleteSalesforceCredentialAsync(int id);
Task DeleteSalesforceCredentialAsync(string name);
// DataConnection specific operations
Task GetConnectionStringAsync(string credentialName);
Task GetConnectionStringAsync(int credentialId);
Task GetDbManagerOptionsAsync(string credentialName);
Task GetDbManagerOptionsAsync(int credentialId);
Task GetRestServiceOptionsAsync(string credentialName);
Task GetRestServiceOptionsAsync(int credentialId);
// Helper methods
Task GetCredentialIdByNameAsync(string name, CredentialManager.Models.CredentialType type);
// Connection testing
Task<(bool Success, string Message)> TestDatabaseConnectionAsync(string credentialName);
Task<(bool Success, string Message)> TestDatabaseConnectionAsync(DatabaseCredential credential);
Task<(bool Success, string Message)> TestRestApiConnectionAsync(string credentialName);
Task<(bool Success, string Message)> TestRestApiConnectionAsync(RestApiCredential credential);
Task<(bool Success, string Message)> TestSapB1ConnectionAsync(string credentialName);
Task<(bool Success, string Message)> TestSapB1ConnectionAsync(SapB1ServiceLayerCredential credential);
Task<(bool Success, string Message)> TestSalesforceConnectionAsync(string credentialName);
Task<(bool Success, string Message)> TestSalesforceConnectionAsync(SalesforceCredential credential);
// Key associations
Task SaveKeyAssociationAsync(KeyAssociation association);
Task SaveKeyAssociationParallelAsync(KeyAssociation association);
Task FindKeyAssociationByValueAsync(string keyValue, string destinationEntity, string restCredentialName);
Task FindKeyAssociationByValueAsync(string keyValue);
Task> GetKeyAssociationsByDestinationAsync(string destinationEntity, string restCredentialName);
Task> GetAllActiveKeyAssociationsAsync();
Task> GetAllKeyAssociationsAsync();
Task UpdateKeyAssociationAsync(KeyAssociation association);
Task DeactivateKeyAssociationAsync(int id);
Task DeleteKeyAssociationAsync(int id);
Task ClearKeyAssociationsAsync(string destinationEntity, string restCredentialName);
Task ClearAllKeyAssociationsAsync();
Task> GetInvalidKeyAssociationsAsync(string destinationEntity, string restCredentialName);
Task CleanupInvalidKeyAssociationsAsync(string destinationEntity, string restCredentialName);
Task UpdateKeyAssociationLastVerifiedAsync(int id);
Task GetKeyAssociationStatisticsAsync();
// Parallel key association operations
Task SaveKeyAssociationParallelAsync(string keyValue, string destinationEntity, string destinationId, string restCredentialName);
Task FindKeyAssociationByValueParallelAsync(string keyValue, string destinationEntity, string restCredentialName);
Task FindKeyAssociationByValueParallelAsync(string keyValue);
Task DeleteKeyAssociationParallelAsync(int id);
// Deletion synchronization operations
Task MarkDeletedAssociationsAsync(List sourceKeyValues, string destinationEntity, string restCredentialName);
Task> GetPendingDeletionsAsync(string destinationEntity, string restCredentialName);
Task MarkDeletionSyncedAsync(int associationId);
Task> GetDeletedAssociationsAsync(string destinationEntity, string restCredentialName);
// Cascade delete operations
Task DeleteCredentialCascadeAsync(string name);
Task DeleteCredentialCascadeAsync(int id);
}