package dev.lonami.talaria.data import dev.lonami.talaria.bindings.Native import dev.lonami.talaria.models.Dialog import dev.lonami.talaria.models.MessageAck import dev.lonami.talaria.models.MessagePreview 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 = Native.getDialogs() try { val dialogCount = Native.dialogCount(dialogPtr) for (i in 0 until dialogCount) { dialogs.add( Dialog( id = Native.dialogPacked(dialogPtr, i), title = Native.dialogTitle(dialogPtr, i), lastMessage = MessagePreview( sender = Native.dialogSender(dialogPtr, i), text = Native.dialogText(dialogPtr, i), date = LocalDateTime.parse( Native.dialogTime(dialogPtr, i), DateTimeFormatter.ISO_OFFSET_DATE_TIME ), ack = when (Native.dialogAck(dialogPtr, i)) { 0 -> MessageAck.RECEIVED 1 -> MessageAck.SENT 2 -> MessageAck.SEEN else -> MessageAck.RECEIVED } ), pinned = Native.dialogPin(dialogPtr, i) != 0 ) ) } } finally { Native.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 } }