package com.rosetta.messenger.ui.components

import android.content.Context
import android.content.SharedPreferences
import androidx.compose.runtime.*
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp

/**
 * 🎯 KEYBOARD HEIGHT PROVIDER
 * 
 * Вдохновлено Telegram's EmojiView.java:
 * - Сохраняет высоту клавиатуры в SharedPreferences
 * - Использует сохранённую высоту для emoji picker
 * - Обновляет при изменении высоты клавиатуры
 * 
 * Telegram код:
 * ```java
 * keyboardHeight = MessagesController.getGlobalEmojiSettings()
 *     .getInt("kbd_height", AndroidUtilities.dp(200));
 * ```
 */
object KeyboardHeightProvider {
    private const val TAG = "KeyboardHeight"
    private const val PREFS_NAME = "emoji_keyboard_prefs"
    private const val KEY_KEYBOARD_HEIGHT = "kbd_height"
    private const val DEFAULT_HEIGHT_DP = 280 // Telegram uses 200, we use 280
    
    /**
     * Получить сохранённую высоту клавиатуры
     */
    fun getSavedKeyboardHeight(context: Context): Int {
        val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
        val defaultPx = dpToPx(context, DEFAULT_HEIGHT_DP)
        val savedPx = prefs.getInt(KEY_KEYBOARD_HEIGHT, defaultPx)
        val isDefault = savedPx == defaultPx
        
        return savedPx
    }
    
    /**
     * Сохранить высоту клавиатуры
     */
    fun saveKeyboardHeight(context: Context, heightPx: Int) {
        
        if (heightPx > 0) {
            val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
            val oldHeight = prefs.getInt(KEY_KEYBOARD_HEIGHT, -1)
            val changed = oldHeight != heightPx
            
            prefs.edit().putInt(KEY_KEYBOARD_HEIGHT, heightPx).apply()
            
            
            if (changed) {
            } else {
            }
        } else {
        }
    }
    
    /**
     * Получить длительность анимации клавиатуры
     * Telegram использует: AdjustPanLayoutHelper.keyboardDuration (250ms обычно)
     */
    fun getKeyboardAnimationDuration(): Long {
        return 250L
    }
    
    // Helper functions
    private fun dpToPx(context: Context, dp: Int): Int {
        val density = context.resources.displayMetrics.density
        return (dp * density).toInt()
    }
    
    private fun pxToDp(context: Context, px: Int): Int {
        val density = context.resources.displayMetrics.density
        return (px / density).toInt()
    }
}

/**
 * Composable для получения высоты клавиатуры из SharedPreferences
 * НЕ использует remember - всегда берет актуальное значение из SharedPreferences
 */
@Composable
fun rememberSavedKeyboardHeight(): Dp {
    val context = LocalContext.current
    
    // 🔥 НЕ используем remember - каждый раз читаем актуальное значение
    val heightPx = KeyboardHeightProvider.getSavedKeyboardHeight(context)
    val density = context.resources.displayMetrics.density
    val heightDp = (heightPx / density).dp
    
    
    return heightDp
}
