Pith - kerf
package com.vgmlr.kerf

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SearchDialog(notes: List<Note>, onSelect: (Int) -> Unit, onDismiss: () -> Unit) {
    val kerfColors = LocalKerfColors.current!!

    Dialog(
        onDismissRequest = onDismiss,
        properties = DialogProperties(usePlatformDefaultWidth = false)
    ) {
        Surface(
            modifier = Modifier.padding(horizontal = 50.dp),
            shape = RoundedCornerShape(ROUND_END),
            color = kerfColors.alertBackground,
            border = EDGE
        ) {
            Column(
                modifier = Modifier
                    .width(IntrinsicSize.Max)
                    .padding(horizontal = 24.dp, vertical = 26.dp)
                    .heightIn(max = 340.dp)
                    .verticalScroll(rememberScrollState())
            ) {
                notes.forEachIndexed { index, n ->
                    Box(
                        modifier = Modifier
                            .fillMaxWidth()
                            .heightIn(min = 56.dp)
                            .clickable { onSelect(n.id) }
                            .padding(horizontal = 16.dp),
                        contentAlignment = Alignment.CenterStart
                    ) {
                        Text(
                            text = n.title.ifBlank { "Untitled" },
                            color = kerfColors.alertText,
                            style = MaterialTheme.typography.bodyLarge,
                            maxLines = 1,
                            overflow = TextOverflow.Ellipsis
                        )
                    }

                    if (notes.size > 1 && index < notes.lastIndex) {
                        HorizontalDivider(color = Color.Gray.copy(alpha = 0.3f))
                    }
                }
            }
        }
    }
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun ShareDialog(
    notes: List<Note>,
    onSelect: (Int) -> Unit,
    onAddNew: () -> Unit,
    onDismiss: () -> Unit
) {
    val kerfColors = LocalKerfColors.current!!

    Dialog(
        onDismissRequest = onDismiss,
        properties = DialogProperties(usePlatformDefaultWidth = false)
    ) {
        Surface(
            modifier = Modifier.padding(horizontal = 50.dp),
            shape = RoundedCornerShape(ROUND_END),
            color = kerfColors.alertBackground,
            border = EDGE
        ) {
            Column(
                modifier = Modifier
                    .width(IntrinsicSize.Max)
                    .padding(horizontal = 24.dp, vertical = 26.dp)
                    .heightIn(max = 340.dp)
                    .verticalScroll(rememberScrollState())
            ) {
                Row(
                    modifier = Modifier
                        .fillMaxWidth()
                        .heightIn(min = 56.dp)
                        .clickable { onAddNew() }
                        .padding(horizontal = 16.dp),
                    verticalAlignment = Alignment.CenterVertically
                ) {
                    Text(
                        "New List",
                        color = kerfColors.menuText,
                        style = MaterialTheme.typography.bodyLarge,
                        modifier = Modifier.weight(1f)
                    )
                    Spacer(Modifier.width(16.dp))
                    Icon(
                        Icons.Default.Add,
                        null,
                        tint = kerfColors.alertText.copy(alpha = 0.4f)
                    )
                }

                if (notes.isNotEmpty()) {
                    HorizontalDivider(color = Color.Gray.copy(alpha = 0.3f))
                }

                notes.forEachIndexed { index, n ->
                    Box(
                        modifier = Modifier
                            .fillMaxWidth()
                            .heightIn(min = 56.dp)
                            .clickable { onSelect(n.id) }
                            .padding(horizontal = 16.dp),
                        contentAlignment = Alignment.CenterStart
                    ) {
                        Text(
                            text = n.title.ifBlank { "Untitled" },
                            color = kerfColors.alertText,
                            style = MaterialTheme.typography.bodyLarge,
                            maxLines = 1,
                            overflow = TextOverflow.Ellipsis
                        )
                    }

                    if (index < notes.lastIndex) {
                        HorizontalDivider(color = Color.Gray.copy(alpha = 0.3f))
                    }
                }
            }
        }
    }
}

@Composable
fun DataDialog(createdAt: Long?, updatedAt: Long?, lastShared: Long?, onDismiss: () -> Unit) {
    val createddate = KerfUtils.formatLastSharedDate(createdAt)
    val modifieddate = KerfUtils.formatLastSharedDate(updatedAt)
    val shareddate = KerfUtils.formatLastSharedDate(lastShared)
    val kerfColors = LocalKerfColors.current!!
    Dialog(
        onDismissRequest = onDismiss,
        properties = DialogProperties(usePlatformDefaultWidth = false)
    ) {
        Surface(
            modifier = Modifier.padding(horizontal = 50.dp),
            color = kerfColors.alertBackground,
            shape = RoundedCornerShape(ROUND_END),
            border = EDGE
        ) {
            Column(
                modifier = Modifier.padding(horizontal = 24.dp, vertical = 32.dp),
                horizontalAlignment = Alignment.CenterHorizontally
            ) {
                Row {
                    Column(horizontalAlignment = Alignment.End) {
                        Text("Created", color = kerfColors.alertText, fontSize = 14.sp)
                        Text("Modified", color = kerfColors.alertText, fontSize = 14.sp)
                        Text("Shared", color = kerfColors.alertText, fontSize = 14.sp)
                    }
                    Spacer(Modifier.width(16.dp))
                    Column {
                        Text(
                            createddate,
                            color = kerfColors.alertText,
                            fontSize = 13.sp,
                            fontFamily = FontFamily.Monospace
                        )
                        Text(
                            modifieddate,
                            color = kerfColors.alertText,
                            fontSize = 13.sp,
                            fontFamily = FontFamily.Monospace
                        )
                        Text(
                            shareddate,
                            color = kerfColors.alertText,
                            fontSize = 13.sp,
                            fontFamily = FontFamily.Monospace
                        )
                    }
                }
            }
        }
    }
}