#!/usr/bin/env python3

from pyln.client import Plugin

import json
import os.path


plugin = Plugin()


@plugin.init()
def init(configuration, options, plugin):
    if os.path.exists('moves.json'):
        jd = {}
        with open('moves.json', 'r') as f:
            jd = f.read()
        plugin.coin_moves = json.loads(jd)
    else:
        plugin.coin_moves = []


@plugin.subscribe("coin_movement")
def notify_coin_movement(plugin, coin_movement, **kwargs):
    idx = coin_movement['movement_idx']
    plugin.log("{} coins movement version: {}".format(idx, coin_movement['version']))
    plugin.log("{} coins node: {}".format(idx, coin_movement['node_id']))
    plugin.log("{} coins mvt_type: {}".format(idx, coin_movement['type']))
    plugin.log("{} coins account: {}".format(idx, coin_movement['account_id']))
    plugin.log("{} coins credit: {}".format(idx, coin_movement['credit']))
    plugin.log("{} coins debit: {}".format(idx, coin_movement['debit']))
    plugin.log("{} coins tag: {}".format(idx, coin_movement['tag']))
    plugin.log("{} coins timestamp: {}".format(idx, coin_movement['timestamp']))
    plugin.log("{} coins coin_type: {}".format(idx, coin_movement['coin_type']))

    for f in ['payment_hash', 'utxo_txid', 'vout', 'txid', 'part_id', 'blockheight']:
        if f in coin_movement:
            plugin.log("{} coins {}: {}".format(idx, f, coin_movement[f]))

    plugin.coin_moves.append(coin_movement)

    # we save to disk so that we don't get borked if the node restarts
    # assumes notification calls are synchronous (not thread safe)
    with open('moves.json', 'w') as f:
        f.write(json.dumps(plugin.coin_moves))


@plugin.method('listcoinmoves_plugin')
def return_moves(plugin):
    result = []
    if os.path.exists('moves.json'):
        jd = {}
        with open('moves.json', 'r') as f:
            jd = f.read()
        result = json.loads(jd)
    return {'coin_moves': result}


plugin.run()