#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Create backup for certain date for specified channel in slack
"""
import argparse
import logging

from slack_backup import client


def setup_logger(args):
    """Setup logger format and level"""

    level = logging.WARNING

    if args.quiet:
        level = logging.ERROR
        if args.quiet > 1:
            level = logging.CRITICAL

    if args.verbose:
        level = logging.INFO
        if args.verbose > 1:
            level = logging.DEBUG

    logging.basicConfig(level=level,
                        format="%(asctime)s %(levelname)s: %(message)s")

def generate_raport(args):
    """Generate logs"""
    slack = client.Client(args)
    slack.generate_history()

def fetch_data(args):
    """Fetch and store data"""
    slack = client.Client(args)
    slack.update()


def main():
    """Main function"""
    parser = argparse.ArgumentParser()

    subparser = parser.add_subparsers(dest='parser')
    subparser.required = True

    fetch = subparser.add_parser('fetch', help='Update local db with Slack'
                                 ' data')
    fetch.add_argument('-t', '--token', required=True, help='Slack token - '
                       'a string, which can be generated/obtained via '
                       'https://api.slack.com/docs/oauth-test-tokens page.')
    fetch.add_argument('-u', '--user', default='', help='Username for your '
                       'Slack account')
    fetch.add_argument('-p', '--password', default='', help='Password for your '
                       'Slack account.')
    fetch.add_argument('-e', '--team', required=True, help='Team name, which '
                       'is part of slack url, for example: if url is '
                       '"https://team.slack.com" than "team" is a name of '
                       'the team.')
    fetch.add_argument('-v', '--verbose', help='Be verbose. Adding more "v"'
                       'will increase verbosity', action="count", default=0)
    fetch.add_argument('-q', '--quiet', help='Be quiet. Adding more "q"'
                       'will decrease verbosity', action="count", default=0)
    fetch.add_argument('-c', '--channels', default=[], nargs='+',
                       help='List of channels to perform actions on. '
                       'Default is all channels.')

    fetch.add_argument('-d', '--database', default='',
                       help='Path to the database file.')

    fetch.set_defaults(func=fetch_data)

    generate = subparser.add_parser('generate', help='Generate logs out of '
                                    'data in provided database')
    generate.add_argument('-o', '--output', default='logs', help="Output "
                          "directory for store logs. All logs are organised "
                          "per channel. By default it's `logs' directory")
    generate.add_argument('-f', '--format', default='none',
                          choices=('text', 'none'),
                          help='Output format. Default is none; only database '
                          'is updated by latest messages for all/selected '
                          'channels.')
    generate.add_argument('-t', '--theme', default='plain',
                          choices=('plain', 'unicode'),
                          help='Choose theme for text output. It doesn\'t '
                          'affect other output formats.')

    generate.add_argument('-v', '--verbose', help='Be verbose. Adding more "v"'
                          'will increase verbosity', action="count", default=0)
    generate.add_argument('-q', '--quiet', help='Be quiet. Adding more "q"'
                          'will decrease verbosity', action="count", default=0)
    generate.add_argument('-c', '--channels', default=[], nargs='+',
                          help='List of channels to perform actions on. '
                          'Default is all channels.')

    generate.add_argument('-d', '--database', default='',
                          help='Path to the database file.')

    generate.set_defaults(func=generate_raport)

    args = parser.parse_args()
    setup_logger(args)
    args.func(args)


if __name__ == "__main__":
    main()
