"""
链式语法 - 类似大括号风格的链式调用
使用方式：界面.标签().垂直().按钮()
"""

from 方圆.核心 import _布局上下文, 创建主窗口, 为窗口设置中央区域和布局
from 方圆.核心 import 应用全局样式, 简单居中窗口


class 链式界面:
    """链式调用界面构建器"""

    def __init__(self, 上下文=None, 窗口=None):
        self.上下文 = 上下文
        self.窗口 = 窗口
        self.布局堆栈 = [上下文] if 上下文 else []

    def 创建窗口(self, 标题="我的应用", 宽度=600, 高度=400):
        """创建新窗口"""
        self.窗口 = 创建主窗口(标题, 宽度, 高度)
        中央区域, 布局 = 为窗口设置中央区域和布局(self.窗口)
        self.上下文 = _布局上下文(布局)
        self.布局堆栈 = [self.上下文]
        return self

    def 设置样式(self, 背景颜色="#F0F0F0", 字体="微软雅黑", 字号=12):
        """设置全局样式"""
        if self.窗口:
            应用全局样式(self.窗口, 背景颜色, 字体, 字号)
        return self

    def 垂直(self, 内边距=20, 间距=15):
        """进入垂直布局"""
        if self.布局堆栈:
            新上下文 = self.布局堆栈[-1].垂直布局(内边距, 间距)
            self.布局堆栈.append(新上下文)
        return self

    def 水平(self, 内边距=20, 间距=15):
        """进入水平布局"""
        if self.布局堆栈:
            新上下文 = self.布局堆栈[-1].水平布局(内边距, 间距)
            self.布局堆栈.append(新上下文)
        return self

    def 阴影框(self, 背景颜色="#FFFFFF", 圆角=10, 阴影模糊=15, 阴影偏移Y=5):
        """进入阴影框布局"""
        if self.布局堆栈:
            新上下文 = self.布局堆栈[-1].阴影框(背景颜色, 圆角, 阴影模糊, 阴影偏移Y)
            self.布局堆栈.append(新上下文)
        return self

    def 结束(self):
        """结束当前布局，返回上一级"""
        if len(self.布局堆栈) > 1:
            self.布局堆栈.pop()
        return self

    def 标签(self, 文字="", 对齐方式="居中", **样式):
        """添加标签"""
        if self.布局堆栈:
            self.布局堆栈[-1].标签(文字, 对齐方式, **样式)
        return self

    def 按钮(self, 文字="点击我", 点击时执行=None, **样式):
        """添加按钮"""
        if self.布局堆栈:
            self.布局堆栈[-1].按钮(文字, 点击时执行, **样式)
        return self

    def 输入框(self, 提示文字="", **样式):
        """添加输入框"""
        if self.布局堆栈:
            self.布局堆栈[-1].输入框(提示文字, **样式)
        return self

    def 文本框(self, 提示文字="", 只读=False, **样式):
        """添加文本框"""
        if self.布局堆栈:
            self.布局堆栈[-1].文本框(提示文字, 只读, **样式)
        return self

    def 列表框(self, **样式):
        """添加列表框"""
        if self.布局堆栈:
            self.布局堆栈[-1].列表框(**样式)
        return self

    def 复选框(self, 文字="", 初始状态=False, **样式):
        """添加复选框"""
        if self.布局堆栈:
            self.布局堆栈[-1].复选框(文字, 初始状态, **样式)
        return self

    def 弹性空间(self, 方向="垂直"):
        """添加弹性空间"""
        if self.布局堆栈:
            self.布局堆栈[-1].弹性空间(方向)
        return self

    def 间距(self, 大小=10):
        """添加间距"""
        if self.布局堆栈:
            self.布局堆栈[-1].间距(大小)
        return self

    def 居中(self):
        """居中窗口"""
        if self.窗口:
            简单居中窗口(self.窗口)
        return self

    def 显示(self):
        """显示窗口"""
        if self.窗口:
            self.窗口.show()
        return self

    def 获取窗口(self):
        """获取窗口对象"""
        return self.窗口


def 创建界面(标题="我的应用", 宽度=600, 高度=400):
    """创建链式界面"""
    界面 = 链式界面()
    界面.创建窗口(标题, 宽度, 高度)
    return 界面


# 使用示例
def 示例应用():
    """链式语法的使用示例"""
    (创建界面("链式语法示例", 800, 600)
     .设置样式(背景颜色="#F5F5F7")
     .标签("链式语法示例", 字体大小="24px", 字体粗细="bold")
     .垂直(内边距=20)
     .水平()
     .输入框("搜索...")
     .按钮("搜索")
     .结束()
     .阴影框(背景颜色="#FFFFFF", 圆角=8)
     .标签("结果列表")
     .列表框(最小高度="200px")
     .结束()
     .结束()
     .居中()
     .显示())

    return 界面.获取窗口()


__all__ = [
    '链式界面',
    '创建界面',
    '示例应用'
]