#!/usr/bin/env python
# -*- coding: utf-8 -*-


import sys
import argh
import pandas
import dateutil.parser

import flask_bigtempo.utils as butils
import flask_bigtempo.store.defaults as defaults
import flask_bigtempo.store.clients as clients


@argh.named('save')
def rest_save(reference, symbol,
	          jsondata,
	          json_format=defaults.DEFAULT_JSON_FORMAT,
	          host=defaults.DEFAULT_HOST):
	data = pandas.read_json(jsondata, orient=json_format)

	if not clients.DFStoreRestClient(host).save(data, reference, symbol, json_format=json_format):
		sys.exit(1)



@argh.named('retrieve')
def rest_retrieve(reference, symbol, start=None, end=None,
	              json_format=defaults.DEFAULT_JSON_FORMAT,
                  date_format=defaults.DEFAULT_DATE_FORMAT,
	              host=defaults.DEFAULT_HOST):
	start = butils.parse_datetime_str(start)
	end = butils.parse_datetime_str(end)

	data = clients.DFStoreRestClient(host).retrieve(reference, symbol,
		                                          start=start, end=end,
		                                          json_format=json_format)
	if data is None:
		print 'ERROR: No data returned'
		sys.exit(1)

	print data.to_json(orient=json_format, date_format=date_format)


@argh.named('delete')
def rest_delete(reference, symbol, host=defaults.DEFAULT_HOST):
    if not clients.DFStoreRestClient(host).delete(reference, symbol):
        print 'ERROR: Could not delete'
        sys.exit(1)


if __name__ == '__main__':
    parser = argh.ArghParser()
    parser.add_commands([rest_save,
                         rest_retrieve,
                         rest_delete],
                        namespace='rest',
                        title='REST interface client commands')

    parser.dispatch()
