# apps/aroflo_connector_app/cli/timesheets_cli.py

from __future__ import annotations

import argparse
from datetime import datetime
from typing import Optional

from apps.aroflo_connector_app.core.client import AroFloClient
from apps.aroflo_connector_app.features.timesheets.service import (
    TimesheetsService,
    TimesheetFilters,
)



def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(
        description="Listado de timesheets desde AroFlo."
    )

    parser.add_argument(
        "--page",
        type=int,
        default=1,
        help="Número de página (por defecto 1).",
    )
    parser.add_argument(
        "--userid",
        type=str,
        help="Filtrar por userid (AroFlo ID codificado).",
    )
    parser.add_argument(
        "--taskid",
        type=str,
        help="Filtrar por taskid.",
    )
    parser.add_argument(
        "--timesheetid",
        type=str,
        help="Filtrar por timesheetid.",
    )
    parser.add_argument(
        "--type",
        type=str,
        choices=["Productive", "Non-Productive", "Expense"],
        help="Tipo de timesheet.",
    )
    parser.add_argument(
        "--from-date",
        type=str,
        help="Fecha inicial workdate (YYYY-MM-DD).",
    )
    parser.add_argument(
        "--to-date",
        type=str,
        help="Fecha final workdate (YYYY-MM-DD).",
    )

    return parser.parse_args()


def main() -> None:
    args = parse_args()

    client = AroFloClient()
    service = TimesheetsService(client)


    def parse_date(value: Optional[str]):
        if not value:
            return None
        return datetime.strptime(value, "%Y-%m-%d").date()

    filters = TimesheetFilters(
        timesheetid=args.timesheetid,
        taskid=args.taskid,
        userid=args.userid,
        type=args.type,
        workdate_from=parse_date(args.from_date),
        workdate_to=parse_date(args.to_date),
    )

    result = service.list_timesheets(
    filters=filters,
    page=args.page,
    )


    print(f"Página: {result['pagenumber']} / {result['maxpageresults']}")
    print(f"Resultados en esta página: {result['currentpageresults']}")
    print("-" * 80)

    for idx, ts in enumerate(result["timesheets"], start=1):
        user = ts.get("user", {})
        task = ts.get("task", {})
        print(
            f"{idx:3d}. {ts.get('timesheetid')} | "
            f"User: {user.get('givennames', '')} {user.get('surname', '')} | "
            f"Task: {task.get('jobnumber', '')} {task.get('taskname', '')} | "
            f"Date: {ts.get('workdate')} | "
            f"Hours: {ts.get('hours')} | "
            f"Type: {ts.get('type')}"
        )


if __name__ == "__main__":
    main()
