package dev.inmo.tgbotapi.extensions.utils.types.files

import dev.inmo.tgbotapi.bot.TelegramBot
import dev.inmo.tgbotapi.requests.DownloadFileStream
import dev.inmo.tgbotapi.requests.abstracts.FileId
import dev.inmo.tgbotapi.requests.get.GetFile
import dev.inmo.tgbotapi.types.files.PathedFile
import dev.inmo.tgbotapi.types.files.abstracts.TelegramMediaFile
import dev.inmo.tgbotapi.types.message.content.abstracts.MediaContent
import dev.inmo.tgbotapi.utils.*

suspend fun convertToStorageFile(
    downloadStreamAllocator: ByteReadChannelAllocator,
    pathedFile: PathedFile,
    mimeType: MimeType
): StorageFile {
    return downloadStreamAllocator.asStorageFile(
        pathedFile.fileName,
        mimeType
    )
}

suspend fun TelegramBot.convertToStorageFile(
    pathedFile: PathedFile,
    mimeType: MimeType
): StorageFile = convertToStorageFile(
    execute(DownloadFileStream(pathedFile.filePath)),
    pathedFile,
    mimeType
)

suspend fun TelegramBot.convertToStorageFile(
    fileId: FileId,
    mimeType: MimeType
): StorageFile = convertToStorageFile(execute(GetFile(fileId)), mimeType)

suspend fun TelegramBot.convertToStorageFile(
    file: TelegramMediaFile,
    mimeType: MimeType
): StorageFile = convertToStorageFile(file.fileId, mimeType)

suspend fun TelegramBot.convertToStorageFile(
    content: MediaContent,
    mimeType: MimeType
): StorageFile = convertToStorageFile(content.media, mimeType)