package dev.lonami.talaria.data import dev.lonami.talaria.models.Dialog import dev.lonami.talaria.models.MessagePreview import uniffi.talaria.* import java.time.LocalDateTime import java.time.format.DateTimeFormatter interface DialogRepository { fun loadDialogs(): List } class NativeDialogRepository : DialogRepository { override fun loadDialogs(): List { val dialogs = mutableListOf() val dialogPtr = getDialogs() try { val dialogCount = dialogCount(dialogPtr) for (i in 0U until dialogCount) { dialogs.add( Dialog( id = dialogPacked(dialogPtr, i), title = dialogTitle(dialogPtr, i), lastMessage = MessagePreview( sender = dialogSender(dialogPtr, i), text = dialogText(dialogPtr, i), date = LocalDateTime.parse( dialogTime(dialogPtr, i), DateTimeFormatter.ISO_OFFSET_DATE_TIME ), ack = dialogAck(dialogPtr, i), ), pinned = dialogPin(dialogPtr, i) != 0U ) ) } } finally { freeDialogs(dialogPtr) } return dialogs } } class MockDialogRepository : DialogRepository { override fun loadDialogs(): List { val dialogs = mutableListOf() for (i in 0 until 10) { dialogs.add( Dialog( id = "$i", title = "Sample Dialog $i", lastMessage = if (i % 4 == 3) { null } else { MessagePreview( sender = if (i % 2 == 0) { "Sender A" } else { "Sender B" }, text = if (i % 3 == 2) { "Very Long Sample Message $i, with a Lot of Text, which makes it hard to Preview" } else { "Sample Message $i" }, date = LocalDateTime.now(), ack = when (i % 3) { 0 -> MessageAck.RECEIVED 1 -> MessageAck.SENT 2 -> MessageAck.SEEN else -> throw RuntimeException() } ) }, pinned = i < 4 ) ) } return dialogs } }