---@meta alerthelper

--------------------------------------------------------------------------------
-- alerthelper 系统弹窗处理规则模块
--------------------------------------------------------------------------------

---@alias alerthelper_pattern string
---@alias alerthelper_button_match string|integer|string[]
---@alias alerthelper_text_field_match string|integer|string[]
---@alias alerthelper_text_field_values string|string[]|table<string, string>
---@alias alerthelper_condition_callback fun(alert:alerthelper_alert):boolean?
---@alias alerthelper_action_callback fun(alert:alerthelper_alert):any
---@alias alerthelper_log_callback fun(alert:alerthelper_alert)

---@class alerthelper_text_field*
---@field placeholder? string 文本框 placeholder
---@field text? string 文本框当前文本

---@class alerthelper_alert*
---@field title? string 弹窗标题
---@field message? string 弹窗内容
---@field cancelButton? string 取消按钮标题
---@field preferredButton? string 首选按钮标题
---@field buttons? string[] 按钮标题列表
---@field textFields? alerthelper_text_field[]|alerthelper_text_field_values 文本框列表；写入时可设置填充值
---@field processName? string 进程名
---@field bundleIdentifier? string 应用包名
---@field className? string 弹窗类名
---@field parentClassName? string 父对象类名
---@field pointer? any 弹窗对象指针
---@field parent? any 父对象指针
---@field source? string 弹窗来源
local alert = {}

--- 点击指定标题或序号的按钮。
---@param button string|integer 按钮标题或序号
function alert:clickButton(button) end

--- 点击取消按钮。
function alert:clickCancel() end

--- 点击首选按钮。
function alert:clickPreferred() end

---@class alerthelper_conditions*
---@field bundleIdentifier? alerthelper_pattern 应用包名模式
---@field processName? alerthelper_pattern 进程名模式
---@field parentClassName? alerthelper_pattern 父对象类名模式
---@field className? alerthelper_pattern 弹窗类名模式
---@field source? alerthelper_pattern 弹窗来源模式
---@field title? alerthelper_pattern 标题模式
---@field message? alerthelper_pattern 内容模式
---@field cancelButton? alerthelper_pattern 取消按钮标题模式
---@field preferredButton? alerthelper_pattern 首选按钮标题模式
---@field buttons? alerthelper_button_match 按钮匹配；字符串表示任一按钮匹配，数字表示按钮数量，数组表示数量和顺序都匹配
---@field textFields? alerthelper_text_field_match 文本框匹配；字符串表示任一 placeholder 匹配，数字表示文本框数量，数组表示数量和顺序都匹配

---@class alerthelper_actions*
---@field textFields? alerthelper_text_field_values 填充文本框
---@field clickButton? string|integer 点击指定按钮标题或序号
---@field clickCancel? boolean 点击取消按钮
---@field clickPreferred? boolean 点击首选按钮
---@field log? boolean|alerthelper_log_callback 输出日志；true 使用默认日志函数

---@class alerthelper_rule*
---@field name? string 规则名称
---@field conditions? alerthelper_conditions*|alerthelper_condition_callback|false 匹配条件；省略时无条件匹配
---@field actions? alerthelper_actions*|alerthelper_action_callback 匹配后的动作
---@field continue? boolean 匹配后是否继续匹配后续规则
---@field wait? integer 匹配后延迟执行动作的毫秒数

---@class alerthelper*
---@field _VERSION string 模块版本
---@type alerthelper*
local M = {}

M._VERSION = "0.8.4"

--- 设置系统弹窗处理规则列表。
---
--- 该模块无法在安全模式下正常工作。设置成功时返回上一份缓存规则。
---@param rules alerthelper_rule[] 规则列表
---@return alerthelper_rule[]? last_rules 上一份缓存规则；无法定位 tweak 目录时为 nil
function M.setRules(rules) end

--- 读取上一份缓存规则。
---@return alerthelper_rule[]? rules 缓存规则；不存在时为 nil
function M.getRules() end

--- 清空系统弹窗处理规则。
function M.clearRules() end

--- 将字符串转成每个字符都按普通文本匹配的 Lua pattern。
---@param str string 原始字符串
---@return string pattern 转义后的 Lua pattern
function M.plainPattern(str) end

--- 生成完全相等匹配的 Lua pattern。
---@param str string 原始字符串
---@return string pattern 完全匹配的 Lua pattern
function M.equalPattern(str) end

return M
