#!/usr/bin/env python3

from gnucash_ixbrl.config import Config

import gnucash_ixbrl.accounts as accounts
from gnucash_ixbrl.taxonomy import Taxonomy
import sys
from gnucash_ixbrl.datasource import DataSource

if len(sys.argv) < 4:
    sys.stderr.write("Usage:\n    report <config> <report> <format>\n")
    sys.exit(1)

try:

    cfg = Config.load(sys.argv[1])
    cfg.set("internal.software-name", "gnucash-ixbrl")
    cfg.set("internal.software-version", "1.6.0")

    kind = cfg.get("accounts.kind")
    file = cfg.get("accounts.file")

    cls = accounts.get_class(kind)
    session = cls(file)

    d = DataSource(cfg, session)

    elt = d.get_element(sys.argv[2])

    if sys.argv[3] == "ixbrl":
        tx_cfg = cfg.get("report.taxonomy")
        tx = Taxonomy(tx_cfg)
        elt.to_ixbrl(tx, sys.stdout)
    elif sys.argv[3] == "html":
        tx_cfg = cfg.get("report.taxonomy")
        tx = Taxonomy(tx_cfg)
        elt.to_html(tx, sys.stdout)
    elif sys.argv[3] == "text":
        tx_cfg = cfg.get("report.taxonomy")
        tx = Taxonomy(tx_cfg)
        elt.to_text(tx, sys.stdout)
    else:
        raise RuntimeError("Output type '%s' not known." % sys.argv[3])

except Exception as e:
    sys.stderr.write("Exception: %s\n" % str(e))
    raise e
    sys.exit(1)

