#!/usr/bin/env python3
"""
test-data-generator - Generator Script
A script to generate test data based on provided schema or pre-defined types (users, products, orders).
Generated: 2025-12-10 03:48:17
"""

import json
import argparse
from pathlib import Path
from datetime import datetime
from typing import Dict


class Generator:
    def __init__(self, config: Dict):
        self.config = config
        self.output_dir = Path(config.get("output", "./output"))
        self.output_dir.mkdir(parents=True, exist_ok=True)

    def generate_markdown(self, title: str, content: str) -> Path:
        """Generate markdown document."""
        filename = f"{title.lower().replace(' ', '_')}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.md"
        file_path = self.output_dir / filename

        md_content = f"""# {title}

Generated by test-data-generator
Date: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}

## Overview
{content}

## Configuration
```json
{json.dumps(self.config, indent=2)}
```

## Category
testing

## Plugin
test-data-generator
"""

        file_path.write_text(md_content)
        return file_path

    def generate_json(self, data: Dict) -> Path:
        """Generate JSON output."""
        filename = f"output_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
        file_path = self.output_dir / filename

        output_data = {
            "generated_by": "test-data-generator",
            "timestamp": datetime.now().isoformat(),
            "category": "testing",
            "plugin": "test-data-generator",
            "data": data,
            "config": self.config,
        }

        with open(file_path, "w") as f:
            json.dump(output_data, f, indent=2)

        return file_path

    def generate_script(self, name: str, template: str) -> Path:
        """Generate executable script."""
        filename = f"{name}.sh"
        file_path = self.output_dir / filename

        script_content = f"""#!/bin/bash
# Generated by test-data-generator
# Date: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}

set -e  # Exit on error

echo "🚀 Running {name}..."

# Template content
{template}

echo "✅ Completed successfully"
"""

        file_path.write_text(script_content)
        file_path.chmod(0o755)  # Make executable
        return file_path


def main():
    parser = argparse.ArgumentParser(
        description="A script to generate test data based on provided schema or pre-defined types (users, products, orders)."
    )
    parser.add_argument("--type", choices=["markdown", "json", "script"], default="markdown")
    parser.add_argument("--output", "-o", default="./output", help="Output directory")
    parser.add_argument("--config", "-c", help="Configuration file")
    parser.add_argument("--title", default="test-data-generator Output")
    parser.add_argument("--content", help="Content to include")

    args = parser.parse_args()

    config = {"output": args.output}
    if args.config and Path(args.config).exists():
        with open(args.config) as f:
            config.update(json.load(f))

    generator = Generator(config)

    print(f"🔧 Generating {args.type} output...")

    if args.type == "markdown":
        output_file = generator.generate_markdown(args.title, args.content or "Generated content")
    elif args.type == "json":
        output_file = generator.generate_json({"title": args.title, "content": args.content})
    else:  # script
        output_file = generator.generate_script(
            args.title.lower().replace(" ", "_"), args.content or "# Add your script content here"
        )

    print(f"✅ Generated: {output_file}")
    return 0


if __name__ == "__main__":
    import sys

    sys.exit(main())
