package com.rosetta.messenger.ui.components

import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.airbnb.lottie.compose.*

/**
 * Компонент для отображения анимированных эмодзи Telegram в формате TGS
 * 
 * TGS - это Lottie анимации (JSON), сжатые через gzip.
 * Библиотека Lottie автоматически распаковывает и проигрывает их.
 * 
 * @param tgsFileName Имя файла из папки assets/emoji (например: "5431456783947234.tgs")
 * @param modifier Модификатор для кастомизации размера и других параметров
 * @param size Размер эмодзи (по умолчанию 32.dp)
 * @param iterations Количество повторений анимации (LottieConstants.IterateForever для бесконечного)
 * @param speed Скорость воспроизведения анимации (1.0f = нормальная скорость)
 */
@Composable
fun TelegramAnimatedEmoji(
    tgsFileName: String,
    modifier: Modifier = Modifier,
    size: Dp = 32.dp,
    iterations: Int = LottieConstants.IterateForever,
    speed: Float = 1.0f
) {
    // Путь к файлу в assets/emoji/
    val animationPath = "emoji/$tgsFileName"
    
    // Загружаем анимацию из assets
    val composition by rememberLottieComposition(
        LottieCompositionSpec.Asset(animationPath)
    )
    
    // Настраиваем воспроизведение
    val progress by animateLottieCompositionAsState(
        composition = composition,
        iterations = iterations,
        speed = speed,
        restartOnPlay = true
    )
    
    // Отображаем Lottie анимацию
    LottieAnimation(
        composition = composition,
        progress = { progress },
        modifier = modifier.size(size)
    )
}

/**
 * Упрощенный вариант для быстрого использования с ID документа
 * 
 * @param documentId ID документа из Telegram (например: 5431456783947234)
 */
@Composable
fun TelegramAnimatedEmojiById(
    documentId: Long,
    modifier: Modifier = Modifier,
    size: Dp = 32.dp
) {
    TelegramAnimatedEmoji(
        tgsFileName = "$documentId.tgs",
        modifier = modifier,
        size = size
    )
}

/**
 * Вариант с возможностью остановки/запуска анимации
 * 
 * @param isPlaying Управление воспроизведением анимации
 */
@Composable
fun TelegramAnimatedEmojiPlayable(
    tgsFileName: String,
    isPlaying: Boolean = true,
    modifier: Modifier = Modifier,
    size: Dp = 32.dp,
    speed: Float = 1.0f
) {
    val animationPath = "emoji/$tgsFileName"
    
    val composition by rememberLottieComposition(
        LottieCompositionSpec.Asset(animationPath)
    )
    
    val progress by animateLottieCompositionAsState(
        composition = composition,
        isPlaying = isPlaying,
        iterations = LottieConstants.IterateForever,
        speed = speed,
        restartOnPlay = true
    )
    
    LottieAnimation(
        composition = composition,
        progress = { progress },
        modifier = modifier.size(size)
    )
}
