package ru.forbion.f7cloud.feature.notes

import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import kotlinx.coroutines.delay
import ru.forbion.f7cloud.core.designsystem.F7HeaderActionButton
import ru.forbion.f7cloud.core.designsystem.F7ModuleScreen
import ru.forbion.f7cloud.core.designsystem.F7OutlinedField

private const val AUTOSAVE_DEBOUNCE_MS = 1200L

/**
 * Редактор заметки (P1, простой markdown). Автосохранение с debounce → PUT с `If-Match`
 * (конфликт версий обрабатывает [NotesViewModel]). Rich-режим/preview/полноэкранный — P2
 * (карта app-map/notes.md).
 */
@Composable
fun NoteEditorScreen(
    note: Note,
    saving: Boolean,
    onContentSave: (String) -> Unit,
    onToggleFavorite: () -> Unit,
    onDelete: () -> Unit,
    onBack: () -> Unit,
    modifier: Modifier = Modifier,
) {
    var content by remember(note.id) { mutableStateOf(note.content) }

    // Автосейв: сохраняем через паузу после последнего изменения, если текст отличается.
    LaunchedEffect(content) {
        if (content != note.content) {
            delay(AUTOSAVE_DEBOUNCE_MS)
            onContentSave(content)
        }
    }

    F7ModuleScreen(
        title = note.title.ifBlank { "Новая заметка" },
        modifier = modifier,
        loading = false,
        headerActions = {
            F7HeaderActionButton(text = if (note.favorite) "★" else "☆", onClick = onToggleFavorite)
            F7HeaderActionButton(text = "Удалить", onClick = onDelete)
            F7HeaderActionButton(text = if (saving) "Сохранение…" else "Готово", onClick = {
                if (content != note.content) onContentSave(content)
                onBack()
            }, enabled = !saving)
        },
    ) {
        F7OutlinedField(
            value = content,
            onValueChange = { if (!note.readonly) content = it },
            label = if (note.readonly) "Только для чтения" else "Заметка",
            minLines = 12,
            modifier = Modifier.fillMaxWidth(),
        )
    }
}
