#!/usr/bin/python

import argparse
import sys
import os
import logging
from crypter.client import CryptPipeClient

def parse(filename):

	config = {}

	with open(filename, 'r') as f:

		for line in f:
			if line[:1] == '#':
				continue
			(key, value) = line.split('=')
			config[key.strip()] = value.strip()

	return config


if __name__ == '__main__':

	parser = argparse.ArgumentParser()
	parser.add_argument('-c', '--config', default='/etc/crypter/crypter.cfg', help='Configuration file')
	parser.add_argument('-d', '--directory', help='Socket directory')
	parser.add_argument('-v', '--verbose', action='store_true', help='Verbose logging for debugging')
	parser.add_argument('action', choices=['encrypt', 'decrypt'], help='Action to take')
	parser.add_argument('message', nargs=argparse.REMAINDER, help='Message to encrypt (as text) or decrypt (as Base64)')
	args = parser.parse_args()

	if not os.path.exists(args.config):
		sys.stderr.write('Unable to find config file')
		sys.exit(1)

	cfg = parse(args.config)

	if args.directory:
		cfg['directory'] = args.directory

	if args.verbose:
		logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(name)s:%(lineno)d %(message)s')
	else:
		logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(name)s:%(lineno)d %(message)s')

	client = CryptPipeClient(cfg['directory'])

	if args.action == 'encrypt':
		if args.message:
			print client.encrypt(' '.join(args.message))
		else:
			print client.encrypt(sys.stdin.read().rstrip('\n'))
	elif args.action == 'decrypt':
		if args.message:
			print client.decrypt(' '.join(args.message));
		else:
			print client.decrypt(sys.stdin.read().rstrip('\n'))
