#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Generate CSV files from examples-raw.json
"""

import csv
import json
from pathlib import Path

DATA_DIR = Path(__file__).parent.parent / "data"
SKILL_DIR = Path(__file__).parent.parent


def extract_keywords_from_file(filename):
    """Extract keywords from filename"""
    base = filename.replace('.html', '')
    parts = base.split('_')
    return ', '.join([p for p in parts if len(p) > 1])


def extract_name_from_file(filename):
    """Extract display name from filename"""
    base = filename.replace('.html', '')
    parts = base.split('_')[1:]  # Remove prefix like 'webgl'
    return ' / '.join(parts)


def generate_csvs():
    """Generate tracking and examples CSVs from JSON"""
    json_file = DATA_DIR / "examples-raw.json"

    with open(json_file, 'r', encoding='utf-8') as f:
        examples = json.load(f)

    print(f"Loaded {len(examples)} examples from JSON")

    # Count by category
    categories = {}
    for ex in examples:
        cat = ex['c']
        categories[cat] = categories.get(cat, 0) + 1

    print("\nExamples by category:")
    for cat, count in sorted(categories.items(), key=lambda x: -x[1]):
        print(f"  {cat}: {count}")

    # Generate tracking CSV
    tracking_file = SKILL_DIR / "extraction-progress.csv"
    tracking_rows = []
    for i, ex in enumerate(examples, 1):
        tracking_rows.append({
            'ID': i,
            'Category': ex['c'],
            'Name': extract_name_from_file(ex['f']),
            'File': ex['f'],
            'URL': f"https://threejs.org/examples/{ex['f']}",
            'Keywords': extract_keywords_from_file(ex['f']),
            'Status': 'extracted',
            'Extracted_At': '2026-01-21'
        })

    with open(tracking_file, 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=['ID', 'Category', 'Name', 'File', 'URL', 'Keywords', 'Status', 'Extracted_At'])
        writer.writeheader()
        writer.writerows(tracking_rows)
    print(f"\nGenerated {len(tracking_rows)} entries in {tracking_file}")

    # Generate examples-all.csv
    examples_file = DATA_DIR / "examples-all.csv"
    examples_rows = []
    for i, ex in enumerate(examples, 1):
        name = extract_name_from_file(ex['f'])
        keywords = extract_keywords_from_file(ex['f'])

        # Determine complexity based on category
        complexity = "medium"
        if "advanced" in ex['c'] or "gpgpu" in ex['f'] or "compute" in ex['f']:
            complexity = "high"
        elif "basic" in ex['f'] or ex['c'] in ['css2d', 'css3d', 'svg']:
            complexity = "low"

        # Generate use cases based on keywords
        use_cases = []
        file_lower = ex['f'].lower()
        if 'animation' in file_lower:
            use_cases.append('character animation')
        if 'loader' in file_lower:
            use_cases.append('model loading')
        if 'material' in file_lower:
            use_cases.append('material effects')
        if 'postprocessing' in file_lower:
            use_cases.append('visual effects')
        if 'shadow' in file_lower:
            use_cases.append('realistic lighting')
        if 'physics' in file_lower:
            use_cases.append('physics simulation')
        if 'xr' in file_lower or 'vr' in file_lower or 'ar' in file_lower:
            use_cases.append('VR/AR experience')
        if 'interactive' in file_lower or 'raycaster' in file_lower:
            use_cases.append('user interaction')
        if 'particle' in file_lower or 'points' in file_lower:
            use_cases.append('particle effects')
        if 'terrain' in file_lower or 'geometry' in file_lower:
            use_cases.append('procedural generation')
        if 'tsl' in file_lower:
            use_cases.append('shader programming')
        if 'compute' in file_lower:
            use_cases.append('GPU compute')
        if not use_cases:
            use_cases.append('3D visualization')

        desc = f"Three.js {ex['c']} example demonstrating {name.replace(' / ', ', ')}"

        examples_rows.append({
            'ID': i,
            'Category': ex['c'],
            'Name': name,
            'File': ex['f'],
            'URL': f"https://threejs.org/examples/{ex['f']}",
            'Keywords': keywords,
            'Complexity': complexity,
            'Use Cases': '; '.join(use_cases),
            'Description': desc
        })

    with open(examples_file, 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=['ID', 'Category', 'Name', 'File', 'URL', 'Keywords', 'Complexity', 'Use Cases', 'Description'])
        writer.writeheader()
        writer.writerows(examples_rows)
    print(f"Generated {len(examples_rows)} entries in {examples_file}")


if __name__ == "__main__":
    generate_csvs()
