import click
import pandas as pd
from pathlib import Path
from .gtconfig import GTConfigModel, write_template
from .gtcore import GT


@click.group()
def cli():
    """Greater Tables CLI tool"""
    pass


@cli.command()
@click.argument("input_file", type=click.Path(exists=True))
@click.option("--output", "-o", type=click.Path(), help="Write rendered output to file")
@click.option("--format", "-f", type=click.Choice(["html", "text", "latex", "svg", "pdf"]), default="html")
@click.option("--config", type=click.Path(), help="Path to a YAML config file")
def render(input_file, output, format, config):
    """Render a table from a data file."""
    path = Path(input_file)
    ext = path.suffix.lower()

    if ext == ".csv":
        df = pd.read_csv(path)
    elif ext == ".feather":
        df = pd.read_feather(path)
    elif ext == ".pkl":
        df = pd.read_pickle(path)
    else:
        raise click.UsageError(f"Unsupported extension: {ext}")

    cfg = GTConfigModel(Path(config) if config else None).get()
    gt = GT(df, config=cfg)

    rendered = (
        gt.render_html() if format == "html"
        else gt.render_text() if format == "text"
        else gt.render_latex()
    )

    if format in ('svg', 'pdf'):
        print('more work to do!!')

    if output:
        Path(output).write_text(rendered, encoding="utf-8")
    else:
        print(rendered)


@cli.command()
@click.argument("path", type=click.Path(), default="config.yaml")
def write_template(path):
    """Write default config to the given path."""
    write_template(Path(path))
    click.echo(f"Config written to {path}")
