"""
Data formatting functions for employee workstation activity tracking.

This module contains functions for formatting database query results into API responses.
"""
from flask import current_app


def format_report_data(results, time_period):
    """
    Formats the raw database results into a list of dictionaries for the API.
    Assumes the input `results` are already correctly aggregated by user and period from the SQL query.

    Args:
        results (list): List of database result rows (SQLAlchemy RowMapping objects)
        time_period (str): Time period of the report ('daily', 'weekly', or 'monthly')

    Returns:
        list: List of formatted dictionaries for API response
    """
    current_app.logger.debug(
        f"Formatting report data for period: {time_period}. Input rows: {len(results)}"
    )
    period_key_map = {"daily": "day", "weekly": "week_start", "monthly": "month_start"}
    period_key = period_key_map.get(time_period, "period_start")

    formatted_data = []
    for row in results:
        period_value = row["period_start"]
        if hasattr(period_value, "isoformat"):
            period_value = period_value.isoformat()

        first_login_time = row["first_login_time"]
        if hasattr(first_login_time, "isoformat"):
            first_login_time = first_login_time.isoformat()

        duration_hours = row["total_hours"]
        if duration_hours is None:
            duration_hours = 0.0
        else:
            duration_hours = float(duration_hours)

        formatted_data.append(
            {
                "user": row["user"],
                period_key: period_value,
                "duration_hours": duration_hours,
                "first_login_time": first_login_time,
            }
        )

    current_app.logger.debug(
        f"Formatted report data created. Output rows: {len(formatted_data)}"
    )
    return formatted_data


def format_user_activity(results):
    """
    Formats the raw user activity results into a list of dictionaries.

    Args:
        results (list): List of database result rows (SQLAlchemy RowMapping objects)

    Returns:
        list: List of formatted user activity dictionaries
    """
    formatted_data = []
    for row in results:
        start_time = row["start_time"]
        end_time = row["end_time"]

        # Format timestamps for display
        if hasattr(start_time, "isoformat"):
            start_time = start_time.isoformat()
        if hasattr(end_time, "isoformat"):
            end_time = end_time.isoformat()

        # Format duration as float
        duration = (
            float(row["session_duration_hours"])
            if row["session_duration_hours"] is not None
            else 0.0
        )

        formatted_data.append(
            {
                "date": row["work_date"].isoformat()
                if hasattr(row["work_date"], "isoformat")
                else str(row["work_date"]),
                "start_time": start_time,
                "end_time": end_time,
                "duration_hours": round(duration, 2),
            }
        )
    return formatted_data
