package com.rosetta.messenger.utils

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Color
import android.net.Uri
import androidx.activity.result.ActivityResult
import androidx.core.content.FileProvider
import com.yalantis.ucrop.UCrop
import java.io.File

/**
 * Помощник для работы с обрезкой изображений через uCrop
 */
object ImageCropHelper {
    
    private const val CROP_IMAGE_FILE_NAME = "cropped_avatar.png"
    
    /**
     * Создает Intent для запуска uCrop
     * @param context Контекст
     * @param sourceUri URI исходного изображения
     * @param isDarkTheme Темная тема
     * @return Intent для запуска uCrop Activity
     */
    fun createCropIntent(
        context: Context,
        sourceUri: Uri,
        isDarkTheme: Boolean
    ): Intent {
        // Создаем файл для результата crop
        val destinationFile = File(context.cacheDir, CROP_IMAGE_FILE_NAME)
        val destinationUri = Uri.fromFile(destinationFile)
        
        // Настройки uCrop
        val options = UCrop.Options().apply {
            // Круглый overlay для аватара
            setCircleDimmedLayer(true)
            
            // Показываем сетку
            setShowCropGrid(true)
            setShowCropFrame(true)
            
            // Цвета в тёмной теме приложения
            val backgroundColor = Color.parseColor("#121212")  // Основной фон
            val toolbarColor = Color.parseColor("#1A1A1A")     // Цвет тулбара
            val accentColor = Color.parseColor("#0A84FF")      // Accent синий
            
            // Toolbar (верхняя панель)
            setToolbarColor(toolbarColor)
            setStatusBarColor(toolbarColor)
            setToolbarWidgetColor(Color.WHITE)
            
            // Основной фон и overlay
            setRootViewBackgroundColor(backgroundColor)
            setDimmedLayerColor(Color.parseColor("#CC000000"))
            
            // Активные элементы управления
            setActiveControlsWidgetColor(accentColor)
            
            // Crop frame цвета
            setCropFrameColor(accentColor)
            setCropGridColor(Color.parseColor("#66FFFFFF"))
            
            // Нижняя панель (bottom controls) - ставим тёмный фон
            setLogoColor(accentColor)
            
            // ВАЖНО: Цвет фона для нижней панели управления
            // Устанавливаем тот же цвет что и основной фон
            try {
                // UCrop использует внутренний метод для установки цвета bottom controls
                // Используем рефлексию или доступные методы
                val methodSetBottomColor = this::class.java.getMethod("setActiveWidgetColor", Int::class.javaPrimitiveType)
                methodSetBottomColor?.invoke(this, accentColor)
            } catch (e: Exception) {
                // Если метод не найден, ничего не делаем
            }
            
            // Цвет иконок на нижней панели
            setActiveControlsWidgetColor(accentColor)
            
            // Скрываем кнопку поворота по желанию (можно оставить)
            setFreeStyleCropEnabled(false)
            
            // Качество сжатия
            setCompressionFormat(Bitmap.CompressFormat.PNG)
            setCompressionQuality(100)
            
            // Заголовок на английском
            setToolbarTitle("Edit Photo")
            
            // Показываем bottom controls для rotate/scale
            setHideBottomControls(false)
        }
        
        return UCrop.of(sourceUri, destinationUri)
            .withAspectRatio(1f, 1f) // Квадратный crop для аватара
            .withMaxResultSize(512, 512) // Максимальный размер
            .withOptions(options)
            .getIntent(context)
    }
    
    /**
     * Извлекает результат crop из ActivityResult
     * @param result Результат Activity
     * @return URI обрезанного изображения или null при ошибке/отмене
     */
    fun getCroppedImageUri(result: ActivityResult): Uri? {
        return if (result.resultCode == Activity.RESULT_OK && result.data != null) {
            UCrop.getOutput(result.data!!)
        } else {
            null
        }
    }
    
    /**
     * Получает ошибку crop если есть
     */
    fun getCropError(result: ActivityResult): Throwable? {
        return if (result.data != null) {
            UCrop.getError(result.data!!)
        } else {
            null
        }
    }
}
