using e_suite.API.Common.models;
using e_suite.Database.Audit;
using e_suite.Utilities.Pagination;
using eSuite.Core.Miscellaneous;

namespace e_suite.API.Common;

public interface IFormsManager
{
    Task CreateFormTemplateAsync(AuditUserDetails auditUserDetails, CreateFormTemplate createFormTemplate, CancellationToken cancellationToken);

    Task EditFormTemplateAsync(AuditUserDetails auditUserDetails, EditFormTemplate editFormTemplate, CancellationToken cancellationToken);

    Task<GetFormTemplate> GetFormTemplateAsync(IGeneralIdRef generalIdRef, CancellationToken cancellationToken);

    Task<IPaginatedData<GetFormTemplate>> GetFormTemplatesAsync(Paging paging, CancellationToken cancellationToken);

    Task DeleteFormTemplateAsync(AuditUserDetails auditUserDetails, IGeneralIdRef generalIdRef, CancellationToken cancellationToken);

    Task<GeneralIdRef> CreateFormInstanceAsync(AuditUserDetails auditUserDetails, CreateFormInstance createFormInstance, CancellationToken cancellationToken);
    Task CreateFormInstancesAsync(AuditUserDetails auditUserDetails, IEnumerable<CreateFormInstance> createFormInstance, CancellationToken cancellationToken);
    Task<ReadFormInstance?> GetFormInstanceAsync(GeneralIdRef generalIdRef, CancellationToken cancellationToken);
    Task<List<ReadFormInstance>> GetFormInstanceAsync(IEnumerable<GeneralIdRef> generalIdRefs, CancellationToken cancellationToken);

    Task EditFormInstanceAsync(AuditUserDetails auditUserDetails, EditFormInstance editFormInstance, CancellationToken cancellationToken);
    Task EditFormInstanceAsync(AuditUserDetails auditUserDetails, IEnumerable<EditFormInstance> editFormInstances, CancellationToken cancellationToken);
}