#!/usr/bin/env python3
import sys
import json
from datetime import datetime, timezone


def generate_summary(input_json, output_file):
    with open(input_json) as f:
        data = json.load(f)

    lines = []
    lines.append("=" * 70)
    lines.append("  OpenViking Source Build & Performance Benchmark Report")
    lines.append("=" * 70)
    lines.append(f"  Generated: {datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M:%S UTC')}")
    lines.append(f"  Test Time: {data.get('test_time', data.get('timestamp', 'N/A'))}")
    lines.append("")

    env = data.get("environment", {})
    if env:
        lines.append("  --- Environment ---")
        lines.append(f"  Architecture:      {env.get('architecture', 'N/A')}")
        lines.append(f"  Model:             {env.get('Model', 'N/A')}")
        lines.append(f"  CPU Model:         {env.get('cpu_model', 'N/A')}")
        lines.append(f"  CPU Cores:         {env.get('cpu_cores', 'N/A')}")
        lines.append(f"  OpenViking Version: {env.get('software_version', 'N/A')}")
        lines.append(f"  Python Version:    {env.get('python_version', 'N/A')}")
        lines.append(f"  GCC Version:       {env.get('gcc_version', 'N/A')}")
        lines.append(f"  OS:                {env.get('os', 'N/A')}")
        lines.append(f"  Kernel:            {env.get('kernel', 'N/A')}")
        lines.append("")

    context = data.get("primary_benchmark", {})
    if context:
        lines.append("  --- Context Filesystem Benchmark (Primary) ---")
        lines.append(f"  Description:       {context.get('description', 'N/A')}")
        lines.append(f"  Reference:         {context.get('reference', 'N/A')}")
        params = context.get("parameters", {})
        lines.append(f"  Iterations:        {params.get('iterations', 'N/A')}")
        lines.append(f"  Data sizes:        {params.get('data_sizes_bytes', 'N/A')}")
        lines.append(f"  Operations:        {params.get('operations', 'N/A')}")
        lines.append("")

        rs = context.get("results_summary", {})
        for key in ["small_1kb", "medium_64kb", "large_1mb"]:
            if key in rs and isinstance(rs[key], dict):
                lines.append(f"  {key}:")
                r = rs[key]
                for k, v in r.items():
                    lines.append(f"    {k}:  {v}")
                lines.append("")

        if "write_ops_per_sec" in rs:
            lines.append(f"  Overall write ops/sec:  {rs.get('write_ops_per_sec', 'N/A')}")
            lines.append(f"  Overall write latency: {rs.get('write_avg_latency_ms', 'N/A')} ms")
        if "read_ops_per_sec" in rs:
            lines.append(f"  Overall read ops/sec:   {rs.get('read_ops_per_sec', 'N/A')}")
            lines.append(f"  Overall read latency:   {rs.get('read_avg_latency_ms', 'N/A')} ms")

    micro = data.get("micro_benchmark", {})
    if micro:
        lines.append("")
        lines.append("  --- Micro Benchmarks ---")
        lines.append(f"  Description:       {micro.get('description', 'N/A')}")
        mparams = micro.get("parameters", {})
        lines.append(f"  Iterations:        {mparams.get('iterations', 'N/A')}")
        lines.append(f"  Data sizes:        {mparams.get('data_sizes', 'N/A')}")
        lines.append(f"  Thread counts:     {mparams.get('thread_counts', 'N/A')}")
        lines.append("")

        mresults = micro.get("results", {})
        if isinstance(mresults, dict):
            for test_name, res in mresults.items():
                if isinstance(res, dict):
                    lines.append(f"  {test_name}:")
                    for k, v in res.items():
                        if isinstance(v, dict):
                            lines.append(f"    {k}:")
                            for kk, vv in v.items():
                                lines.append(f"      {kk}: {vv}")
                        else:
                            lines.append(f"    {k}:  {v}")
                    lines.append("")

    lines.append("=" * 70)
    lines.append("  Report generated by OpenViking Source Build & Performance Benchmark Workflow")
    lines.append("=" * 70)

    summary = "\n".join(lines)
    with open(output_file, "w") as f:
        f.write(summary)
    print(summary)


if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("Usage: generate_summary.py <input_json> <output_file>")
        sys.exit(1)

    input_json = sys.argv[1]
    output_file = sys.argv[2]
    generate_summary(input_json, output_file)