"""
LUICanvas - 类似Unity的Canvas容器，带有可视化边框
用于组织和管理UI元素，所有UI组件都应该是Canvas的子节点
"""

from LUIObject import LUIObject
from LUISprite import LUISprite
from LUIInitialState import LUIInitialState

__all__ = ["LUICanvas"]


class LUICanvas(LUIObject):
    """
    Canvas容器，类似Unity的Canvas系统
    - 所有UI元素的父容器
    - 带有可视化的边框线框（类似Unity编辑器中的Canvas Gizmo）
    - 可以设置边框颜色和宽度
    """

    def __init__(self, border_color=(0.3, 0.7, 1.0, 0.3), border_width=2, **kwargs):
        """
        创建一个新的Canvas
        
        参数:
            border_color: 边框颜色 (r, g, b, a)，默认为蓝色半透明
            border_width: 边框宽度，默认为2像素（使用平面模式时此参数无效）
        """
        LUIObject.__init__(self)
        
        self._border_width = border_width
        self._border_color = border_color
        
        # 创建一个透明平面覆盖整个Canvas
        self._border_plane = LUISprite(self, "blank", "skin")
        self._border_plane.pos = (0, 0)
        self._border_plane.color = self._border_color
        self._border_plane.z_offset = 0
        
        # 先设置一个固定尺寸，确保可见
        self._border_plane.width = 1280
        self._border_plane.height = 720
        
        # 应用初始状态
        LUIInitialState.init(self, kwargs)
        
        # 最后设置Canvas占满整个屏幕（这会触发setter更新边框）
        self.set_size("100%", "100%")
    
    def _update_borders(self):
        """更新边框平面的位置和大小"""
        # 直接获取width和height属性值
        try:
            width = self.width
            height = self.height
            
            # 设置平面覆盖整个Canvas区域
            self._border_plane.pos = (0, 0)
            self._border_plane.width = width
            self._border_plane.height = height
        except:
            # 如果获取失败，使用默认值
            pass
    
    def set_border_color(self, color):
        """设置边框颜色 (r, g, b, a)"""
        self._border_color = color
        self._border_plane.color = color
    
    def set_border_width(self, width):
        """设置边框宽度（平面模式下无效）"""
        self._border_width = width
    
    def show_border(self):
        """显示边框"""
        self._border_plane.show()
    
    def hide_border(self):
        """隐藏边框"""
        self._border_plane.hide()
    
    @property
    def width(self):
        """获取宽度"""
        return LUIObject.width.fget(self)
    
    @width.setter
    def width(self, value):
        """设置宽度并更新边框"""
        LUIObject.width.fset(self, value)
        self._update_borders()
    
    @property
    def height(self):
        """获取高度"""
        return LUIObject.height.fget(self)
    
    @height.setter
    def height(self, value):
        """设置高度并更新边框"""
        LUIObject.height.fset(self, value)
        self._update_borders()
