package com.vgmlr.stave
import android.content.Context
import android.content.Intent
object StaveText {
fun format(trip: StaveTrip, entries: List<StaveEntry>): String {
val rows = entries.asReversed()
val idx = rows.indices.map { (it + 1).toString() }
val time = rows.map { it.stavetime }
val cost = rows.map { money(it.cost) }
val cat = rows.map { it.label }
val wIdx = idx.maxOfOrNull { it.length } ?: 0
val wTime = time.maxOfOrNull { it.length } ?: 0
val wCost = cost.maxOfOrNull { it.length } ?: 0
val wCat = cat.maxOfOrNull { it.length } ?: 0
return buildString {
append("Stave: ").append(trip.name).append('\n')
append("Total: ").append(money(rows.sumOf { it.cost })).append('\n')
if (rows.isNotEmpty()) append('\n')
rows.indices.forEach { i ->
val line = buildString {
append(idx[i].padStart(wIdx)).append(GAP)
append(time[i].padEnd(wTime)).append(GAP)
append(cost[i].padStart(wCost)).append(GAP)
append(cat[i].padEnd(wCat)).append(GAP)
append(rows[i].location)
}
append(line.trimEnd()).append('\n')
}
}
}
fun fileName(trip: StaveTrip): String =
"stave_${slug(trip.name)}_${StaveOTCClock.getFileNameTimestamp()}.txt"
private fun slug(name: String): String =
name.trim().replace(Regex("[^A-Za-z0-9]+"), "-").trim('-').ifBlank { "trip" }
private const val GAP = " "
}
fun shareStave(context: Context, trip: StaveTrip, entries: List<StaveEntry>) {
val send = Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_SUBJECT, trip.name)
putExtra(Intent.EXTRA_TEXT, StaveText.format(trip, entries))
}
context.startActivity(Intent.createChooser(send, null))
}