"""
Auto-generated Skill

Skill ID: rata2_3angka
Version: v1

Inputs:
- X: number
- Y: number
- Z: number

Outputs:
- rata-rata: number

Side Effects:
None. This skill performs a pure computation and does not alter any system state or external services.

[WARNING] GENERATED CODE — DO NOT EDIT MANUALLY

## Supported Output Types

The `run()` function should return a dict with these fields:

### Required:
- status: "SUCCESS" | "FAILED" | "ERROR"
- message: Human-readable summary

### Optional Rich Outputs (UI will render these):
- output: Plain text response
- data: Any structured data (dict)
- table: {{headers: [...], rows: [[...], [...]]}}
- file: {{name: "file.pdf", path: "/path", mime: "application/pdf", size: "1.2 MB"}}
- image: {{url: "/static/img.png", caption: "Description", alt: "Alt text"}}
- chart: {{type: "bar", title: "Title", labels: [...], datasets: [{{label: "A", data: [...]}}]}}
- actions: [{{id: "action_id", label: "Button Text", "style": "primary|secondary|success|danger"}}]
"""

from typing import Dict, Any, Union


def validate_inputs(inputs: Dict[str, Any]) -> None:
    """
    Validate required inputs.
    Raise ValueError if invalid.
    """
    if not isinstance(inputs, dict):
        raise ValueError("inputs must be a dictionary")


def _parse_and_validate_number(
    inputs: Dict[str, Any], field_name: str
) -> Union[float, Dict[str, Any]]:
    """
    Helper function to parse and validate a numerical input.
    Returns the parsed float or an error dict if validation fails.
    """
    raw_value = inputs.get(field_name)

    if raw_value is None or (isinstance(raw_value, str) and raw_value.strip() == ""):
        return {
            "status": "ERROR",
            "message": f"Input untuk '{field_name}' tidak boleh kosong. Harap berikan nilai numerik.",
            "output": f"Error: Input '{field_name}' diperlukan.",
            "data": {"error": "InputRequired", "input_field": field_name, "provided_value": raw_value}
        }
    
    try:
        # Attempt to convert to float. UI forms often submit values as strings.
        parsed_value = float(raw_value)
        return parsed_value
    except (ValueError, TypeError):
        return {
            "status": "ERROR",
            "message": f"Input tidak valid untuk '{field_name}': '{raw_value}'. Input harus berupa nilai numerik.",
            "output": f"Error: Input '{field_name}' harus berupa angka.",
            "data": {"error": "InvalidInput", "input_field": field_name, "provided_value": raw_value}
        }


def run(inputs: Dict[str, Any]) -> Dict[str, Any]:
    """
    Single entrypoint for this skill.
    Calculates the arithmetic mean of three numbers (X, Y, Z).
    """
    validate_inputs(inputs)

    # --- Skill Logic ---
    # Validate and parse X
    parsed_X = _parse_and_validate_number(inputs, 'X')
    if isinstance(parsed_X, dict):  # If _parse_and_validate_number returned an error dict
        return parsed_X

    # Validate and parse Y
    parsed_Y = _parse_and_validate_number(inputs, 'Y')
    if isinstance(parsed_Y, dict):  # If _parse_and_validate_number returned an error dict
        return parsed_Y

    # Validate and parse Z
    parsed_Z = _parse_and_validate_number(inputs, 'Z')
    if isinstance(parsed_Z, dict):  # If _parse_and_validate_number returned an error dict
        return parsed_Z

    # All inputs are valid numbers, proceed with calculation
    total_sum = parsed_X + parsed_Y + parsed_Z
    rata_rata = total_sum / 3

    output_message = f"rata-rata dari angka {parsed_X} {parsed_Y} dan {parsed_Z} adalah {rata_rata}"

    result = {
        "status": "SUCCESS",
        "message": output_message,
        "output": output_message,
        "data": {"rata-rata": rata_rata}
    }

    return result