#!/usr/bin/env python3
"""
Certificate and Badge Generator for AITBC Training
Generates:
1. Markdown badges (shields.io style) for completed stages
2. HTML certificates with proper formatting
3. Summary certificate for completing all stages
"""
import json
import os
import sys
from datetime import datetime, timezone
from pathlib import Path
CERT_DIR = Path(__file__).parent / ".training_state" / "certificates"
BADGE_DIR = Path(__file__).parent / ".training_state" / "badges"
HTML_DIR = Path(__file__).parent / ".training_state" / "html_certificates"
def ensure_dirs():
"""Ensure output directories exist."""
BADGE_DIR.mkdir(parents=True, exist_ok=True)
HTML_DIR.mkdir(parents=True, exist_ok=True)
def load_certificate(stage_num: int) -> dict:
"""Load certificate JSON for a stage."""
cert_file = CERT_DIR / f"stage{stage_num}_certificate.json"
if not cert_file.exists():
return None
with open(cert_file) as f:
return json.load(f)
def generate_markdown_badge(stage_num: int, cert_data: dict) -> str:
"""Generate shields.io markdown badge for a stage."""
badge_label = f"Stage {stage_num}"
badge_message = "Completed"
badge_color = "brightgreen"
# URL encode spaces
badge_url = f"https://img.shields.io/badge/{badge_label.replace(' ', '%20')}-{badge_message.replace(' ', '%20')}-{badge_color}?style=flat-square"
markdown = f"[]({CERT_DIR}/stage{stage_num}_certificate.json)"
return markdown
def generate_html_certificate(stage_num: int, cert_data: dict) -> str:
"""Generate HTML certificate for a stage."""
stage_name = cert_data.get("stage_name", f"Stage {stage_num}")
timestamp = cert_data.get("completion_timestamp", datetime.now(timezone.utc).isoformat())
wallet = cert_data.get("wallet_name", "Unknown")
cert_id = cert_data.get("certificate_id", "Unknown")
html = f"""
Certificate - Stage {stage_num}
AITBC Agent Training Program
Stage {stage_num}: {stage_name}
Certificate ID: {cert_id}
Completed: {timestamp}
Wallet: {wallet}
Training Program: hermes AITBC Mastery Training
✓ Stage Completed
✓ Hands-On Training
✓ Blockchain Verified
"""
return html
def generate_summary_certificate(completed_stages: list) -> str:
"""Generate summary HTML certificate for completing all stages."""
stages_html = ""
for stage in sorted(completed_stages):
cert = load_certificate(stage)
stage_name = cert.get("stage_name", f"Stage {stage}") if cert else f"Stage {stage}"
stages_html += f' Stage {stage}: {stage_name}
\n'
html = f"""
Mastery Certificate - AITBC Training
AITBC Agent Training Program
Congratulations! You have completed all {len(completed_stages)} training stages
{stages_html}
"""
return html
def generate_markdown_summary(completed_stages: list) -> str:
"""Generate Markdown summary with all badges."""
markdown = "# AITBC Training Certificates\n\n"
markdown += f"Completed {len(completed_stages)} / 11 stages\n\n"
markdown += "## Badges\n\n"
for stage in sorted(completed_stages):
cert = load_certificate(stage)
if cert:
badge = generate_markdown_badge(stage, cert)
markdown += f"{badge} "
markdown += "\n\n## Stages Completed\n\n"
for stage in sorted(completed_stages):
cert = load_certificate(stage)
if cert:
stage_name = cert.get("stage_name", f"Stage {stage}")
timestamp = cert.get("completion_timestamp", "Unknown")
markdown += f"- **Stage {stage}: {stage_name}** - Completed {timestamp}\n"
return markdown
def main():
"""Main function."""
ensure_dirs()
# Find all completed stages
completed_stages = []
for i in range(11): # Stages 0-10
cert = load_certificate(i)
if cert:
completed_stages.append(i)
# Generate markdown badge
badge_md = generate_markdown_badge(i, cert)
badge_file = BADGE_DIR / f"stage{i}_badge.md"
with open(badge_file, 'w') as f:
f.write(badge_md)
# Generate HTML certificate
html = generate_html_certificate(i, cert)
html_file = HTML_DIR / f"stage{i}_certificate.html"
with open(html_file, 'w') as f:
f.write(html)
print(f"✓ Generated badge and HTML certificate for Stage {i}")
# Generate summary certificate if all stages completed
if len(completed_stages) == 11:
summary_html = generate_summary_certificate(completed_stages)
summary_file = HTML_DIR / "mastery_certificate.html"
with open(summary_file, 'w') as f:
f.write(summary_html)
print(f"✓ Generated Mastery Certificate: {summary_file}")
# Generate Markdown summary
if completed_stages:
md_summary = generate_markdown_summary(completed_stages)
summary_md_file = BADGE_DIR / "training_summary.md"
with open(summary_md_file, 'w') as f:
f.write(md_summary)
print(f"✓ Generated Markdown summary: {summary_md_file}")
print(f"\nTotal completed stages: {len(completed_stages)} / 11")
print(f"Badges directory: {BADGE_DIR}")
print(f"HTML certificates: {HTML_DIR}")
if __name__ == "__main__":
main()