"""
上下文语法 - 使用 with 块状语法创建 GUI
使用方式：with 界面: ...
"""

from 方圆.核心 import _布局上下文, 创建主窗口, 为窗口设置中央区域和布局
from 方圆.核心 import 使控件具有样式 as 设置样式


class 界面上下文(_布局上下文):
    """增强的上下文管理器，支持更多便捷方法"""

    def __init__(self, 布局):
        super().__init__(布局)

    def 样式(self, 控件, 样式规则):
        """为控件设置样式"""
        设置样式(控件, 样式规则)
        return 控件

    def 居中(self, 窗口):
        """居中窗口"""
        from 方圆.核心 import 简单居中窗口
        简单居中窗口(窗口)
        return self


class 窗口构建器:
    """窗口构建器，支持链式调用"""

    def __init__(self, 标题="我的应用", 宽度=600, 高度=400):
        self.标题 = 标题
        self.宽度 = 宽度
        self.高度 = 高度
        self.样式配置 = {}

    def 设置标题(self, 标题):
        self.标题 = 标题
        return self

    def 设置尺寸(self, 宽度, 高度):
        self.宽度 = 宽度
        self.高度 = 高度
        return self

    def 设置样式(self, 背景颜色="#F0F0F0", 字体="微软雅黑", 字号=12):
        self.样式配置 = {"背景颜色": 背景颜色, "字体": 字体, "字号": 字号}
        return self

    def 构建(self):
        """构建窗口并返回上下文"""
        窗口 = 创建主窗口(self.标题, self.宽度, self.高度)
        中央区域, 布局 = 为窗口设置中央区域和布局(窗口)

        if self.样式配置:
            from 方圆.核心 import 应用全局样式
            应用全局样式(窗口, **self.样式配置)

        return 窗口, 界面上下文(布局)


def 创建窗口(标题="我的应用", 宽度=600, 高度=400):
    """创建窗口并返回上下文管理器"""
    窗口 = 创建主窗口(标题, 宽度, 高度)
    中央区域, 布局 = 为窗口设置中央区域和布局(窗口)
    return 窗口, 界面上下文(布局)


def 创建高级窗口(标题="我的应用"):
    """返回窗口构建器，支持链式配置"""
    return 窗口构建器(标题)


# 使用示例
def 示例应用():
    """上下文语法的使用示例"""
    窗口, 界面 = 创建窗口("上下文语法示例", 800, 600)

    with 界面:
        界面.标签("欢迎使用上下文语法", 字体大小="24px", 字体粗细="bold")

        with 界面.水平布局(内边距=10):
            界面.输入框("请输入用户名")
            界面.按钮("登录", lambda: print("登录点击"))

        with 界面.阴影框(背景颜色="#FFFFFF", 圆角=8):
            界面.标签("用户信息")
            界面.输入框("姓名")
            界面.输入框("邮箱")

    界面.居中(窗口)
    return 窗口


__all__ = [
    '界面上下文',
    '创建窗口',
    '创建高级窗口',
    '窗口构建器',
    '示例应用'
]