#pragma once

#include "data/wallet_state.h"

#include <string>
#include <vector>

namespace dragonx {
namespace ui {

struct AddressListInput {
    const AddressInfo* info = nullptr;
    bool isZ = false;
    bool hidden = false;
    bool favorite = false;
    bool mining = false;
    std::string label;
    std::string icon;
    int sortOrder = -1;
};

struct AddressListRow {
    const AddressInfo* info = nullptr;
    bool isZ = false;
    bool hidden = false;
    bool favorite = false;
    bool mining = false;
    std::string label;
    std::string icon;
    int sortOrder = -1;
};

struct AddressRowRect {
    float x = 0.0f;
    float y = 0.0f;
    float width = 0.0f;
    float height = 0.0f;
};

struct AddressRowLayout {
    float contentStartX = 0.0f;
    float contentStartY = 0.0f;
    float labelX = 0.0f;
    float contentRight = 0.0f;
    float buttonSize = 0.0f;
    AddressRowRect favoriteButton;
    AddressRowRect visibilityButton;
};

bool AddressListMatchesFilter(const AddressListInput& input, const std::string& filter);
std::vector<AddressListRow> BuildAddressListRows(const std::vector<AddressListInput>& inputs,
                                                 const std::string& filter,
                                                 bool hideZeroBalances,
                                                 bool showHidden);
AddressRowLayout ComputeAddressRowLayout(float rowX,
                                         float rowY,
                                         float rowWidth,
                                         float rowHeight,
                                         float rowPadLeft,
                                         float rowIconSize,
                                         float spacingMd,
                                         float spacingSm,
                                         float spacingXs);
std::string FormatAddressUsdValue(double balance, double priceUsd);

} // namespace ui
} // namespace dragonx
