namespace CMSMicroservice.Application.Common.FileManager;
///
/// سرویس مدیریت فایل — ذخیره روی دیسک، مسیر نسبی در دیتابیس
/// موقع واکشی: خواندن از دیسک و تبدیل به base64 data-URI
///
public interface IFileManager
{
///
/// آپلود یک فایل خام به دیسک
///
/// نتیجه آپلود شامل مسیر نسبی فایل
/// در صورت خطای آپلود
Task UploadAsync(
string directory,
byte[] fileBytes,
string mime,
string? fileName = null,
CancellationToken ct = default);
///
/// آپلود تصویر با بهینهسازی خودکار + ساخت بندانگشتی
///
/// نتیجه آپلود شامل تصویر اصلی و بندانگشتی (مسیرهای نسبی)
/// در صورت خطای آپلود
Task UploadImageAsync(
string directory,
byte[] fileBytes,
string mime,
string? fileName = null,
CancellationToken ct = default);
///
/// حذف فایل از دیسک
///
Task DeleteAsync(long fileId, CancellationToken ct = default);
///
/// خواندن فایل از دیسک و تبدیل به base64 data-URI
/// اگر مسیر از قبل data: باشد، همان را برمیگرداند
/// اگر فایل وجود نداشته باشد، رشته خالی برمیگرداند
///
string ResolveImageUrl(string? path);
}
///
/// نتیجه آپلود فایل
///
/// شناسه فایل در FMS
/// مسیر فایل ذخیرهشده (مثلاً /Images/Products/abc.jpg)
public sealed record UploadedFile(long Id, string Path);
///
/// نتیجه آپلود تصویر — شامل تصویر اصلی و بندانگشتی
///
/// تصویر اصلی بهینهشده
/// تصویر بندانگشتی
public sealed record UploadedImage(UploadedFile Main, UploadedFile Thumbnail);
///
/// خطای آپلود فایل
///
public class FileUploadException : Exception
{
public FileUploadException(string message) : base(message) { }
public FileUploadException(string message, Exception inner) : base(message, inner) { }
}