#!/usr/bin/env python3
"""
Testing Telos - Diagram PNG Generator
=====================================
Generates the four high-resolution PNG diagrams for the "Testing Telos" blog post.
Saves them directly into an `assets/` folder (created automatically if missing).

Run this script once in the root of your work-blog repository:
    python3 generate-telos-diagrams.py

It will produce:
    assets/telos-feature-iteration.png
    assets/telos-invariance-testing.png
    assets/telos-cross-cutting.png
    assets/telos-targeted-concerns.png

All images are 260×260 px at 300 DPI for crisp rendering on the blog.
"""

import matplotlib.pyplot as plt
from matplotlib.patches import Polygon, Circle
import numpy as np
import os

# Ensure assets/ directory exists
os.makedirs("assets", exist_ok=True)
DPI = 300
SIZE = 260

def save_fig(fig, filename):
    """Save figure with consistent styling and transparency."""
    fig.savefig(f"assets/{filename}", dpi=DPI, bbox_inches="tight", pad_inches=0.02, transparent=True)
    plt.close(fig)
    print(f"✓ Generated: assets/{filename}")

# 1. Feature Iteration — The Triangle (Pyramid)
fig1, ax1 = plt.subplots(figsize=(SIZE/100, SIZE/100))
ax1.set_xlim(0, 100)
ax1.set_ylim(0, 105)
ax1.set_aspect("equal")
ax1.axis("off")

# Main pyramid triangle
triangle = Polygon([[50, 12], [92, 92], [8, 92]], closed=True,
                   facecolor="#F8E4C4", edgecolor="#A07828", linewidth=6)
ax1.add_patch(triangle)

# Unit-test layer line (widest)
ax1.plot([22, 78], [73, 73], color="#A07828", linewidth=3)

# Integration-test layer line (middle)
ax1.plot([35, 65], [46, 46], color="#A07828", linewidth=3)

save_fig(fig1, "telos-feature-iteration.png")

# 2. Invariance Testing — The Bullseye
fig2, ax2 = plt.subplots(figsize=(SIZE/100, SIZE/100))
ax2.set_xlim(0, 100)
ax2.set_ylim(0, 100)
ax2.set_aspect("equal")
ax2.axis("off")

# Outermost ring
ax2.add_patch(Circle((50, 50), 44, facecolor="#D4B896", edgecolor="#A07828", linewidth=4))
# Middle ring
ax2.add_patch(Circle((50, 50), 29, facecolor="#C4A276", edgecolor="#8B7560", linewidth=4))
# Innermost ring
ax2.add_patch(Circle((50, 50), 14, facecolor="#A0522D", edgecolor="#7A3E20", linewidth=4))

save_fig(fig2, "telos-invariance-testing.png")

# 3. Cross-Cutting Structural Changes — The Diamond
fig3, ax3 = plt.subplots(figsize=(SIZE/100, SIZE/100))
ax3.set_xlim(0, 100)
ax3.set_ylim(0, 100)
ax3.set_aspect("equal")
ax3.axis("off")

diamond_points = [[50, 6], [94, 50], [50, 94], [6, 50]]
diamond = Polygon(diamond_points, closed=True,
                  facecolor="#7BA085", edgecolor="#5A7A63", linewidth=6)
ax3.add_patch(diamond)

save_fig(fig3, "telos-cross-cutting.png")

# 4. Targeted Non-Functional Concerns — The Star
fig4, ax4 = plt.subplots(figsize=(SIZE/100, SIZE/100))
ax4.set_xlim(0, 100)
ax4.set_ylim(0, 100)
ax4.set_aspect("equal")
ax4.axis("off")

# Star vertices (10-pointed star)
star_points = np.array([
    [50, 4], [61, 36], [96, 36], [68, 58], [78, 92],
    [50, 72], [22, 92], [32, 58], [4, 36], [39, 36]
])
star = Polygon(star_points, closed=True,
               facecolor="#C07060", edgecolor="#8B4040", linewidth=6)
ax4.add_patch(star)

save_fig(fig4, "telos-targeted-concerns.png")

print("\n🎉 All four Testing Telos PNG diagrams have been generated successfully!")
print("   They are now ready to be referenced in your Markdown post.")