#include "balance_recent_tx.h"
#include "../../config/version.h"

#include <cmath>
#include <cstdio>
#include <ctime>

namespace dragonx {
namespace ui {

namespace {
std::string truncateRecentAddress(const std::string& address, int maxLen)
{
    if (address.length() <= static_cast<size_t>(maxLen)) return address;
    int half = (maxLen - 3) / 2;
    return address.substr(0, half) + "..." + address.substr(address.length() - half);
}

std::string formatRecentAmount(const std::string& type, double amount)
{
    char buffer[32];
    snprintf(buffer, sizeof(buffer), "%s%.4f %s",
             type == "send" ? "-" : "+",
             std::abs(amount), DRAGONX_TICKER);
    return std::string(buffer);
}

std::string recentTimeAgo(int64_t timestamp)
{
    if (timestamp <= 0) return "";
    int64_t now = static_cast<int64_t>(std::time(nullptr));
    int64_t diff = now - timestamp;
    if (diff < 0) diff = 0;
    if (diff < 60) return std::to_string(diff) + "s ago";
    if (diff < 3600) return std::to_string(diff / 60) + "m ago";
    if (diff < 86400) return std::to_string(diff / 3600) + "h ago";
    return std::to_string(diff / 86400) + "d ago";
}
}

RecentTxDisplay buildRecentTxDisplay(const TransactionInfo& tx, int addressMaxLen)
{
    return {
        tx.getTypeDisplay(),
        truncateRecentAddress(tx.address, addressMaxLen),
        formatRecentAmount(tx.type, tx.amount),
        recentTimeAgo(tx.timestamp)
    };
}

} // namespace ui
} // namespace dragonx
