package com.samourai.wallet.util;

import org.json.JSONArray;
import org.json.JSONException;

import java.util.HashMap;

public class UTXOUtil {

    private static UTXOUtil instance = null;

    private static HashMap<String,String> utxoTags = null;

    private UTXOUtil() { ; }

    public static UTXOUtil getInstance() {

        if(instance == null) {
            utxoTags = new HashMap<String,String>();
            instance = new UTXOUtil();
        }

        return instance;
    }

    public void reset() {
        utxoTags.clear();
    }

    public void add(String utxo, String tag) {
        utxoTags.put(utxo, tag);
    }

    public String get(String utxo) {
        if(utxoTags.containsKey(utxo))  {
            return utxoTags.get(utxo);
        }
        else    {
            return null;
        }

    }

    public HashMap<String,String> getTags() {
        return utxoTags;
    }

    public void remove(String utxo) {
        utxoTags.remove(utxo);
    }

    public JSONArray toJSON() {

        JSONArray utxos = new JSONArray();
        for(String key : utxoTags.keySet()) {
            JSONArray tag = new JSONArray();
            tag.put(key);
            tag.put(utxoTags.get(key));
            utxos.put(tag);
        }

        return utxos;
    }

    public void fromJSON(JSONArray utxos) {
        try {
            for(int i = 0; i < utxos.length(); i++) {
                JSONArray tag = (JSONArray)utxos.get(i);
                utxoTags.put((String)tag.get(0), (String)tag.get(1));
            }
        }
        catch(JSONException ex) {
            throw new RuntimeException(ex);
        }
    }

}

@@ -235,32 +235,92 @@
 utxoTags = null;
+%0A    private static HashMap%3CString,String%3E utxoNotes = null;
 %0A%0A    private UT
@@ -459,24 +459,78 @@
 ,String%3E();%0A
+            utxoNotes = new HashMap%3CString,String%3E();%0A
             
@@ -647,24 +647,51 @@
 gs.clear();%0A
+        utxoNotes.clear();%0A
     %7D%0A%0A    p
@@ -1107,32 +1107,482 @@
 e(utxo);%0A    %7D%0A%0A
+    public void addNote(String utxo, String note) %7B%0A        utxoNotes.put(utxo, note);%0A    %7D%0A%0A    public String getNote(String utxo) %7B%0A        if(utxoNotes.containsKey(utxo))  %7B%0A            return utxoNotes.get(utxo);%0A        %7D%0A        else    %7B%0A            return null;%0A        %7D%0A%0A    %7D%0A%0A    public HashMap%3CString,String%3E getNotes() %7B%0A        return utxoNotes;%0A    %7D%0A%0A    public void removeNote(String utxo) %7B%0A        utxoNotes.remove(utxo);%0A    %7D%0A%0A
     public JSONA
@@ -1827,32 +1827,233 @@
 (tag);%0A        %7D
+%0A        for(String key : utxoNotes.keySet()) %7B%0A            JSONArray note = new JSONArray();%0A            note.put(key);%0A            note.put(utxoNotes.get(key));%0A            utxos.put(note);%0A        %7D
 %0A%0A        return
@@ -2236,16 +2236,16 @@
 get(i);%0A
-
         
@@ -2312,32 +2312,912 @@
 ;%0A            %7D%0A
+            for(int i = 0; i %3C utxos.length(); i++) %7B%0A                JSONArray note = (JSONArray)utxos.get(i);%0A                utxoNotes.put((String)note.get(0), (String)note.get(1));%0A            %7D%0A        %7D%0A        catch(JSONException ex) %7B%0A            throw new RuntimeException(ex);%0A        %7D%0A    %7D%0A%0A    public JSONArray toJSON_notes() %7B%0A%0A        JSONArray utxos = new JSONArray();%0A        for(String key : utxoNotes.keySet()) %7B%0A            JSONArray note = new JSONArray();%0A            note.put(key);%0A            note.put(utxoNotes.get(key));%0A            utxos.put(note);%0A        %7D%0A%0A        return utxos;%0A    %7D%0A%0A    public void fromJSON_notes(JSONArray utxos) %7B%0A        try %7B%0A            for(int i = 0; i %3C utxos.length(); i++) %7B%0A                JSONArray note = (JSONArray)utxos.get(i);%0A                utxoNotes.put((String)note.get(0), (String)note.get(1));%0A            %7D%0A
         %7D%0A      

add support for utxo notes