using SteUp.Shared.Core.Dto;
using SteUp.Shared.Core.Entities;

namespace SteUp.Shared.Core.Interface.System;

public interface IFileManager
{
    Task<List<AttachedDto>?> GetInspectionFiles(Ispezione ispezione, List<string> fileNameFilter,
        bool includeToUpload = true, CancellationToken ct = default);

    Task<string?> SaveInspectionFile(Ispezione ispezione, byte[] file, string fileName, CancellationToken ct = default);

    string GetFileToUploadDir(Ispezione ispezione, string fileName);

    bool RemoveInspection(Ispezione ispezione, bool removeAlsoFromFinal = true, bool removeAlsoFromToUpload = true);
    bool RemoveInspectionFile(Ispezione ispezione, string fileName, bool removeAlsoFromFinal = true,
        bool removeAlsoFromToUpload = true);

    Task<string?> MoveInspectionFileFromToUploadToFinal(Ispezione ispezione, string fileName, bool overwrite = true,
        CancellationToken ct = default);

    Task<string> SaveToTempStorage(Stream file, string fileName, CancellationToken ct = default);
    Task CleanTempStorageAsync(CancellationToken ct = default);
    Task OpenFile(string fileName, string filePath);

    Task<(string originalUrl, string thumbUrl)> SaveAndCreateThumbAsync(byte[] bytes, string fileName,
        CancellationToken ct = default);

    List<SendEmailDto.AttachmentsDto> GetFileForExport();
}