#!/usr/bin/env python3

import click
import os
import its
from its import __version__ as version
def print_version(ctx, param, value):
    if not value or ctx.resilient_parsing:
        return
    click.echo(its.version)
    ctx.exit()


@click.group()
@click.option('--version', is_flag=True, callback=print_version, expose_value=False, is_eager=True, help="Show version and exit.")
def cli():
    pass


@cli.command()
def init():
    its.Its(os.getcwd(), True)
    click.echo('init')
    click.echo('mkdir .its')


@cli.group(invoke_without_command=True)
@click.option('--id', type=int, required=False)
@click.option('--full', is_flag=True)
@click.option('--history', is_flag=True)
@click.pass_context
def issue(ctx, id, full, history):
    its_obj = its.Its(os.getcwd(), False)
    if id is not None:
        issue = its_obj.issues().get(id)
    else:
        issue = None
    ctx.obj = (its_obj, issue)
    if ctx.invoked_subcommand is not None:
        return

    if issue is not None:
        if full:
            click.echo(issue.str_full())
        else:
            click.echo(issue)
        if history:
            click.echo(issue.str_changes())
    else:
        click.echo(ctx.get_help())


@issue.command()
@click.argument('title', type=str, required=True)
@click.pass_obj
def new(ctx, title):
    ctx[0].issues().add(its.Issue(title))
    click.echo("new")


@issue.command()
@click.option('--full', is_flag=True)
@click.option('--history', is_flag=True)
@click.pass_obj
def list(ctx, full, history):
    all_issues = ctx[0].issues().all()
    if not all_issues:
        click.echo("no issues")
        return
    for issue in all_issues:
        if full:
            click.echo(issue.str_full())
        else:
            click.echo(issue)
        if history:
            click.echo(issue.str_changes())

@issue.group()
@click.pass_obj
def set(issue):
    pass

@set.command()
@click.argument('status', type=str)
@click.pass_obj
def status(ctx, status):
    issue=ctx[1]
    if not issue:
        click.echo("need --id")
    if issue:
        issue.change_status(status)
        ctx[0].issues().update(issue)


@issue.group()
@click.pass_obj
def add(issue):
    pass


@add.command()
@click.argument('comment', type=str)
@click.argument('author', type=str)
@click.pass_obj
def comment(ctx, comment, author):
    issue=ctx[1]
    click.echo("add to: {id}".format(id=issue.issue_id))
    click.echo("comment: {comment}".format(comment=comment))
    issue.comments.append(its.Comment(comment, author))
    ctx[0].issues().update(issue)


@add.command()
@click.argument('label', type=str)
@click.pass_obj
def label(issue, label):
    click.echo("add to: {id}".format(id=issue.id))
    click.echo("label: {label}".format(label=label))


if __name__ == '__main__':
    cli()
