#!/usr/bin/env python

import argparse
import ConfigParser
import os
import sys

from hipchat.api import send_message_to_room
from hipchat.utils import ensure_config

DEFAULT_CONFIG_PATH = "~/.hipchat.cfg"

def get_parser():
	parser = argparse.ArgumentParser(description="HipChat for the command line")

	parser.add_argument("message")
	parser.add_argument("--config", required=False)
	parser.add_argument("-c", "--color", required=False)
	parser.add_argument("-r", "--room", required=False)
	parser.add_argument("-u", "--user", required=False)

	return parser

if __name__ == "__main__":
	parser = get_parser()
	args = parser.parse_args()

	configPath = args.config or os.path.expanduser(DEFAULT_CONFIG_PATH)
	config = ensure_config(configPath)

	roomName = args.room or config.get("hipchat", "room_name")
	try:
		roomNameMap = dict(config.items("rooms"))
	except ConfigParser.NoSectionError:
		exitMessage = "You have not given any rooms in the config at {cp}"
		sys.exit(exitMessage.format(cp=configPath))

	try:
		roomId = roomNameMap[roomName]
	except KeyError:
		exitMessage = "The room '{r}' was not found in config at {cp}"
		sys.exit(exitMessage.format(r=args.room, cp=configPath))

	apiToken = config.get("hipchat", "api_token") or os.getenv("HIPCHAT_API_TOKEN")
	messageSender = args.user or config.get("message_sender", "alias")
	messageColor = args.color or config.get("message_sender", "color")

	send_message_to_room(
		args.message,
		roomId,
		api_token=apiToken,
		sender=messageSender,
		color=messageColor,
	)
