#!/usr/bin/python
from argparse import ArgumentParser, RawDescriptionHelpFormatter
import os
import logging
from cloudflaredns_backup import backup_dns
__author__ = 'm_messiah'

email, token = None, None

parser = ArgumentParser(
        description="Backup CloudFlare DNS zones as files by RFC1035",
        formatter_class=RawDescriptionHelpFormatter,
        epilog="""
    email and token may be passed by environment variables CF_EMAIL and CF_TOKEN

    EXAMPLES:

    %(prog)s root@example.com 1234567890
        get all your CloudFlare zones to console

    %(prog)s root@example.com 1234567890 -z example.com -z example2.com
        get only example.com and example2.com zones.
        This example may be simplified as:
        %(prog)s root@example.com 1234567890 -z "example1.com example2.com"

    %(prog)s root@example.com 1234567890 -z example.com -o zones
        create if not exists folder and write zone to ./zones/example.com
        """
)
parser.add_argument("email", help="CloudFlare email", nargs='?', default=None)
parser.add_argument("token", help="CloudFlare API token",
                    nargs='?', default=None)

parser.add_argument("-n", "--ns", action="append",
                    help="List of backup ns servers")
parser.add_argument("-z", "--zones", action="append",
                    help="List of exported zones (if omitted - export all)")
parser.add_argument("-c", "--cred",
                    help="File with CloudFlare credentials (email:token)")
parser.add_argument("-o", "--output",
                    help="Output directory for zones "
                         "(if omitted write zones to stdout)")
parser.add_argument('-v', '--verbose', action="store_true",
                    help="Show debug logging. "
                         "BE CAREFUL when use verbosity with STDOUT zones")
args = parser.parse_args()
if args.verbose:
    logging.getLogger().setLevel(logging.DEBUG)

if args.ns:
    args.ns = u" ".join(args.ns).split()

if args.zones:
    args.zones = u" ".join(args.zones).split()

if args.cred:
    try:
        email, token = open(args.cred).read().strip().split(":")
    except:
        logging.warning("Error while parse credentials from %s" % args.cred)

if not email:
    if args.email:
        email = args.email
    elif "CF_EMAIL" in os.environ:
        email = os.environ["CF_EMAIL"]
    else:
        parser.print_help()
        exit(1)

if not token:
    if args.token:
        token = args.token
    elif "CF_TOKEN" in os.environ:
        token = os.environ["CF_TOKEN"]
    else:
        parser.print_help()
        exit(1)

backup_dns(email, token, args.zones, args.output, args.ns)
