#!/usr/bin/env python3
"""
Shader POC Test - Issue #106

Tests 6 render variants:
1. Basic frame (no special flags)
2. clip_children=True
3. cache_subtree=True
4. Basic + shader_enabled
5. clip_children + shader_enabled
6. cache_subtree + shader_enabled

The shader applies a wave distortion + glow effect.
Shader-enabled frames should show visible animation.
"""
import mcrfpy
import sys

# Create test scene
scene = mcrfpy.Scene("shader_test")
mcrfpy.current_scene = scene
ui = scene.children

# Create a background
bg = mcrfpy.Frame(pos=(0, 0), size=(1024, 768), fill_color=(30, 30, 40, 255))
ui.append(bg)

# Helper to create a test frame with children
def create_test_frame(x, y, label, clip=False, cache=False, shader=False):
    """Create a frame with some child content for testing."""
    frame = mcrfpy.Frame(
        pos=(x, y),
        size=(200, 200),
        fill_color=(60, 80, 120, 255),
        outline_color=(200, 200, 255, 255),
        outline=2.0,
        clip_children=clip,
        cache_subtree=cache
    )

    # Add some child content
    title = mcrfpy.Caption(text=label, pos=(5, 5), font_size=12)
    title.fill_color = (255, 255, 200, 255)
    frame.children.append(title)

    # Add a sprite or shape inside
    inner = mcrfpy.Frame(
        pos=(20, 35),
        size=(110, 60),
        fill_color=(100, 150, 200, 255),
        outline_color=(255, 255, 255, 200),
        outline=1.0
    )
    frame.children.append(inner)

    # Add text inside inner frame
    inner_text = mcrfpy.Caption(text="Content", pos=(25, 20), font_size=14)
    inner_text.fill_color = (255, 255, 255, 255)
    inner.children.append(inner_text)

    # Enable shader if requested
    if shader:
        frame.shader_enabled = True

    return frame

# Row 1: Without shader
y1 = 50
title1 = mcrfpy.Caption(text="Without Shader:", pos=(20, y1 - 30), font_size=16)
title1.fill_color = (255, 255, 100, 255)
ui.append(title1)

# 1. Basic (no flags)
basic = create_test_frame(50, y1, "Basic", clip=False, cache=False, shader=False)
ui.append(basic)

# 2. clip_children
clipped = create_test_frame(300, y1, "clip_children", clip=True, cache=False, shader=False)
ui.append(clipped)

# 3. cache_subtree
cached = create_test_frame(550, y1, "cache_subtree", clip=False, cache=True, shader=False)
ui.append(cached)

# Row 2: With shader
y2 = 300
title2 = mcrfpy.Caption(text="With Shader (should animate):", pos=(20, y2 - 30), font_size=16)
title2.fill_color = (255, 255, 100, 255)
ui.append(title2)

# 4. Basic + shader
basic_shader = create_test_frame(50, y2, "Basic+Shader", clip=False, cache=False, shader=True)
ui.append(basic_shader)

# 5. clip_children + shader
clipped_shader = create_test_frame(300, y2, "clip+Shader", clip=True, cache=False, shader=True)
ui.append(clipped_shader)

# 6. cache_subtree + shader
cached_shader = create_test_frame(550, y2, "cache+Shader", clip=False, cache=True, shader=True)
ui.append(cached_shader)

# Add instructions
#instructions = mcrfpy.Caption(
#    text="Press Q or Escape to quit. Bottom row should show animated wave/glow effects.",
#    pos=(20, 400),
#    font_size=14
#)
#instructions.fill_color = (180, 180, 180, 255)
#ui.append(instructions)

# Debug info
#debug_info = mcrfpy.Caption(
#    text=f"Frames created: 6 variants (3 without shader, 3 with shader)",
#    pos=(20, 430),
#    font_size=12
#)
#debug_info.fill_color = (120, 120, 120, 255)
#ui.append(debug_info)

# Keyboard handler
def on_key(key, state):
    if state == mcrfpy.InputState.PRESSED and key in (mcrfpy.Key.Q, mcrfpy.Key.ESCAPE):
        print("PASS: Shader POC test complete - exiting")
        sys.exit(0)

scene.on_key = on_key

print("Shader POC Test running...")
print("- Top row: No shader (static)")
print("- Bottom row: Shader enabled (should animate with wave/glow)")
print("Press Q or Escape to quit")
