// 伪静态功能
?>
<div class="card">
    <div class="card-header">
        <h3 class="card-title"><i class="fas fa-magic"></i> 设置伪静态</h3>
    </div>
    
    <div class="card-body">
        <div class="alert alert-info">
            <i class="fas fa-info-circle"></i>
            快速选择常用规则，或手动编辑下方内容。
        </div>
        
        <div class="row">
            <div class="col-md-5">
                <div class="form-group">
                    <label>常用规则列表</label>
                    <input type="text" id="ruleSearch" class="form-control mb-2" placeholder="搜索规则...">
                    <select id="rewrite" class="form-control" size="8" style="height: auto;">
                        <option value="default">正在加载规则列表...</option>
                    </select>
                    <div class="mt-2 text-right">
                        <button type="button" class="btn btn-light btn-sm" data-action="getBTRewriteRules">
                            <i class="fas fa-sync-alt"></i> 刷新
                        </button>
                    </div>
                </div>
            </div>
            <div class="col-md-7">
                <div class="form-group">
                    <label for="content">规则内容编辑</label>
                    <div class="text-right mb-2">
                        <button type="button" class="btn btn-light btn-sm" onclick="copyContent()">
                            <i class="fas fa-copy"></i> 复制
                        </button>
                        <button type="button" class="btn btn-light btn-sm" onclick="clearContent()">
                            <i class="fas fa-eraser"></i> 清空
                        </button>
                    </div>
                    <textarea id="content" class="form-control" rows="12" placeholder="在此输入规则..." style="height: 280px; font-family: monospace;"></textarea>
                </div>
                
                <div class="text-right mt-3">
                    <button type="button" class="btn btn-primary" data-action="set-wjt">
                        <i class="fas fa-save"></i> 保存设置
                    </button>
                </div>
            </div>
        </div>
    </div>
</div>

<script>
$(document).ready(function() {
    // 页面加载时自动获取规则列表
    getBTRewriteRules();
    
    // 获取当前正在使用的伪静态规则内容
    loadCurrentRewrite();

    // 监听规则选择变化
    $('#rewrite').on('change', function() {
        var $selected = $(this).find('option:selected');
        var name = $selected.val();
        var content = $selected.data('content');
        
        if (content) {
            $('#content').val(content);
        } else if (name && name !== 'default') {
            // 如果内容为空且不是默认项，尝试从后端获取
            var $textarea = $('#content');
            var originalVal = $textarea.val();
            $textarea.val('正在加载规则内容...').prop('disabled', true);
            
            $.ajax({
                type: 'POST',
                url: './api/api_router.php',
                data: { action: 'getrewritecontent', name: name },
                dataType: 'json',
                success: function(res) {
                    if (res && res.code === 'success' && res.content) {
                        $selected.data('content', res.content); // 存入缓存
                        $textarea.val(res.content);
                    } else {
                        $textarea.val(originalVal);
                        layer.alert('获取规则内容失败');
                    }
                },
                error: function() {
                    $textarea.val(originalVal);
                    layer.alert('网络错误，获取规则内容失败');
                },
                complete: function() {
                    $textarea.prop('disabled', false);
                }
            });
        }
    });

    // 搜索功能
    $('#ruleSearch').on('input', function() {
        var val = $(this).val().toLowerCase();
        $('#rewrite option').each(function() {
            var text = $(this).text().toLowerCase();
            if (text.indexOf(val) > -1 || $(this).val() === 'default') {
                $(this).show();
            } else {
                $(this).hide();
            }
        });
    });
});

// 快速应用规则
function applyQuickRule(name) {
    var $select = $('#rewrite');
    var $opt = $select.find('option[value="' + name + '"]');
    if ($opt.length) {
        $select.val(name).trigger('change');
        // 滚动到选中项
        $opt[0].scrollIntoView({ block: 'nearest' });
    } else {
        // 如果列表中没有，尝试直接请求
        var $textarea = $('#content');
        $textarea.val('正在加载规则内容...').prop('disabled', true);
        $.ajax({
            type: 'POST',
            url: './api/api_router.php',
            data: { action: 'getrewritecontent', name: name },
            dataType: 'json',
            success: function(res) {
                if (res && res.code === 'success' && res.content) {
                    $textarea.val(res.content);
                } else {
                    layer.alert('获取规则内容失败');
                }
            },
            error: function() {
                layer.alert('网络错误');
            },
            complete: function() {
                $textarea.prop('disabled', false);
            }
        });
    }
}

// 复制代码
function copyContent() {
    var content = $('#content').val();
    if (!content) return;
    var $temp = $('<textarea>');
    $('body').append($temp);
    $temp.val(content).select();
    document.execCommand('copy');
    $temp.remove();
    layer.msg('已复制到剪贴板');
}

// 清空代码
function clearContent() {
    layer.confirm('确定要清空当前规则内容吗？', {
        btn: ['确定', '取消']
    }, function() {
        $('#content').val('');
        layer.closeAll();
    });
}

// 缓存已获取的规则，避免重复请求
var rewriteRulesCache = null;

// 绑定相关按钮点击事件
$(document).on('click', '[data-action="getBTRewriteRules"]', function(e){
    e.preventDefault();
    getBTRewriteRules(this);
});
$(document).on('click', '[data-action="set-wjt"]', function(e){ e.preventDefault(); setwjt(this); });

function loadCurrentRewrite() {
    $.ajax({
        type: 'POST',
        url: './api/api_router.php',
        data: 'action=getcurrentrewrite',
        dataType: 'json',
        success: function(data) {
            if (data && data.code == 'success' && data.rule && data.rule.content) {
                $('#content').val(data.rule.content);
            } else {
                // 如果没有获取到伪静态规则，清空文本框
                $('#content').val('');
            }
        },
        error: function(xhr, status, error) {
            console && console.error && console.error('loadCurrentRewrite error', status, error);
            // 发生错误时也清空文本框
            $('#content').val('');
        }
    });
}

// 获取宝塔面板的伪静态规则
function getBTRewriteRules(btn) {
    var $btn = btn ? $(btn) : $('[data-action="getBTRewriteRules"]').first();
    if ($btn.data('loading')) return; // 防止重复点击
    $btn.data('loading', true);
    var originalHtml = $btn.html();
    $btn.html('<i class="fas fa-spinner fa-spin"></i> 获取中...').prop('disabled', true);

    // 如果有缓存，直接使用并跳过网络请求
    if (rewriteRulesCache && Array.isArray(rewriteRulesCache)) {
        try {
            populateRewriteSelect(rewriteRulesCache);
        } finally {
            $btn.data('loading', false).html(originalHtml).prop('disabled', false);
        }
        return;
    }

    $.ajax({
        type: 'POST',
        url: './api/api_router.php',
        data: 'action=getrewriterules',
        dataType: 'json',
        timeout: 8000,
        success: function(data) {
            console.log('获取宝塔面板的伪静态规则返回：', data);
            if (data && data.code == 'success' && data.rules && Array.isArray(data.rules)) {
                rewriteRulesCache = data.rules; // 缓存
                populateRewriteSelect(data.rules);
            } else {
                var msg = (data && data.code) ? data.code : '获取规则失败';
                console && console.error && console.error('获取宝塔面板的伪静态规则失败，返回：', data);
                // 不弹窗，直接在下拉框显示错误
                $('#rewrite').html('<option value="default">' + msg + '</option>');
            }
        },
        error: function(xhr, status, error) {
            var msg = (status === 'timeout') ? '请求超时，请稍后再试' : '获取规则失败';
            $('#rewrite').html('<option value="default">' + msg + '</option>');
            console && console.error && console.error('getBTRewriteRules AJAX error', status, error, xhr);
        },
        complete: function() {
            $btn.data('loading', false).html(originalHtml).prop('disabled', false);
        }
    });
}

function populateRewriteSelect(rules) {
    try {
        var select = $('#rewrite');
        select.empty();
        // 添加默认项
        select.append($('<option>').val('default').text('默认').data('content', ''));
        // 兼容各种字段名（content/rule/body/value）
        rules.forEach(function(rule) {
            var name = rule.name || rule.title || rule.id || '';
            var content = rule.content || rule.rule || rule.body || rule.value || '';
            // 保证 name 至少有值
            var displayName = name || (content ? 'rule-' + Math.random().toString(36).substr(2,6) : '未命名');
            var $opt = $('<option>').val(displayName).text(displayName).data('content', content);
            select.append($opt);
        });

        // 触发 change 事件以更新内容（如果当前没内容）
        if (!$('#content').val()) {
            select.trigger('change');
        }
    } catch (e) {
        console && console.error && console.error('populateRewriteSelect error', e);
    }
}

// 设置伪静态（提交）函数
function setwjt(btn) {
    var $btn = $(btn);
    var originalHtml = $btn.html();
    if ($btn.data('loading')) return; // 已在提交中
    $btn.data('loading', true).prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i> 提交中...');

    var rewrite = $('#rewrite').val() || '';
    var content = $('#content').val() || '';

    var payload = { egn: 'setwjt', rewrite: rewrite, content: content };

    var ii = layer.load(2, {shade: [0.1, '#fff']});
    $.ajax({
        type: 'POST',
        url: 'ajax.php',
        data: payload,
        dataType: 'json',
        timeout: 10000,
        success: function(data) {
            layer.close(ii);
            try {
                if (data.status) {
                    layer.msg(data.msg || '保存成功');
                    setTimeout(function(){ location.reload(); }, 1000);
                    return;
                }
                var msg = data.msg || '设置失败';
                layer.alert(msg);
            } catch (e) {
                console && console.error && console.error('setwjt success handler error', e);
                layer.msg('操作完成');
            }
        },
        error: function(xhr, status, err) {
            layer.close(ii);
            if (status === 'timeout') {
                layer.msg('请求超时，请稍后再试');
            } else {
                layer.msg('网络错误，请重试');
            }
            console && console.error && console.error('setwjt AJAX error', status, err, xhr);
        },
        complete: function() {
            $btn.data('loading', false).prop('disabled', false).html(originalHtml);
        }
    });
}
</script>