package com.vgmlr.wedge
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import java.io.File
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun DataView(vm: MainViewModel, prefs: PreferenceManager, onBack: () -> Unit) {
val editorBg by prefs.bgColor.collectAsState(WedgeConfig.BG_COLOR_DEFAULT)
val noteEntity by vm.dao.getNote().collectAsState(initial = null)
val content = noteEntity?.content ?: ""
val charCount = content.length
val lineCount = if (content.isEmpty()) 0 else content.count { it == '\n' } + 1
val timestamp = noteEntity?.lastModified ?: System.currentTimeMillis()
val modifiedStr = WedgeCalendar.getOtcMetadata(timestamp)
val backupFile = File(LocalContext.current.getExternalFilesDir(null), "backups/wedge.bk")
val backupTimestamp = if (backupFile.exists()) backupFile.lastModified() else null
val backupStr = backupTimestamp?.let { WedgeCalendar.getOtcMetadata(it) } ?: "[none]"
Scaffold(
topBar = {
TopAppBar(
title = { Text("Data", color = colorResource(id = R.color.title_color), fontSize = 18.sp) },
colors = TopAppBarDefaults.topAppBarColors(containerColor = Color(0xFF486860)),
navigationIcon = {
IconButton(onClick = onBack) {
Icon(Icons.AutoMirrored.Filled.ArrowBack, null, tint = colorResource(id = R.color.title_color))
}
}
)
}
) { p ->
Column(
modifier = Modifier
.padding(p)
.fillMaxSize()
.background(parseColor(editorBg))
.verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(16.dp)
) {
SectionSurface(title = "Data") {
DataRowSection(
labels = listOf("Lines", "Characters", "Modified", "Archived", "Synced"),
values = listOf("$lineCount", "$charCount", modifiedStr, backupStr, "[disabled]")
)
}
SectionSurface(title = "Syntax") {
DataRowSection(
labels = listOf(
"Math Regex", " ", "Days Regex", " ", " ",
"Focus Regex", "Italic Regex", "Under-Line Regex", "Strike-Thru", "HR Regex", "Dash Regex"
),
values = listOf(
"123+456=", "operators: + - / * %", "20mar()=",
"(otc-date)", "auto-updates", "text!", "text?", "text*", "text~", "hr([#])",
"dash([#])"
)
)
}
SectionSurface(title = "Logic") {
DataRowSection(
labels = listOf("List Logic", "Sort Logic", " ", "Indent Logic"),
values = listOf("1. text[enter]", "[select][sort]", "parent|child", "[true]")
)
}
SectionSurface(title = "Security") {
DataRowSection(
labels = listOf("Encryption"),
values = listOf("AES-256 [wdg:]")
)
}
Spacer(modifier = Modifier.height(16.dp))
}
}
}
@Composable
private fun SectionSurface(title: String, content: @Composable () -> Unit) {
Column(modifier = Modifier.fillMaxWidth()) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(bottom = 15.dp)
.background(colorResource(id = R.color.calc_bg_color)),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Center
) {
Text(
text = title,
modifier = Modifier.padding(vertical = 7.dp),
color = colorResource(id = R.color.data_color),
style = MaterialTheme.typography.bodyMedium.copy(
letterSpacing = 1.5.sp
)
)
}
Surface(
modifier = Modifier.fillMaxWidth(),
color = Color.Transparent,
content = content
)
}
}
@Composable
private fun DataRowSection(labels: List<String>, values: List<String>) {
Row(modifier = Modifier.padding(horizontal = 12.dp, vertical = 0.dp)) {
Column(horizontalAlignment = Alignment.End, modifier = Modifier.weight(0.4f)) {
labels.forEach { Text(it, color = colorResource(id = R.color.dialog_color), fontSize = 15.sp) }
}
Spacer(Modifier.width(16.dp))
Column(modifier = Modifier.weight(0.6f)) {
values.forEach {
Text(it, color = colorResource(id = R.color.dialog_color),
fontSize = 14.sp, fontFamily = FontFamily.Monospace)
}
}
}
}