<?php


if (!defined('AYCORE_SKIP_BOTAPI_ROUTER')) {
    define('AYCORE_SKIP_BOTAPI_ROUTER', true);
}
session_start();
require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../botapi.php';
require_once __DIR__ . '/lib/icons.php';

$query = $pdo->prepare("SELECT * FROM admin WHERE username=:username");
$query->bindValue(":username", $_SESSION["user"] ?? '', PDO::PARAM_STR);
$query->execute();
$adminRow = $query->fetch(PDO::FETCH_ASSOC);
if (!isset($_SESSION["user"]) || !$adminRow) {
    header('Location: login.php');
    exit;
}
if (empty($_SESSION['csrf_token'])) $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
$csrf = $_SESSION['csrf_token'];

function aycore_text_group(string $key): string {
    $k = strtolower($key);
    if ($k === 'text_start' || $k === 'text_roll' || $k === 'text_fq' || $k === 'text_dec_fq')
        return 'متن‌های شروع و راهنما';
    if (strpos($k, 'text_sell') === 0 || strpos($k, 'text_extend') === 0 || strpos($k, 'text_tariff') === 0)
        return 'متن دکمه‌های خرید و تمدید';
    if (strpos($k, 'text_account') === 0 || strpos($k, 'text_purchased') === 0 || strpos($k, 'accountwallet') === 0)
        return 'متن دکمه‌های حساب کاربری';
    if (strpos($k, 'text_affiliates') === 0 || strpos($k, 'agent') !== false)
        return 'متن‌های نمایندگی و زیرمجموعه';
    if (strpos($k, 'text_support') === 0 || strpos($k, 'text_help') === 0 || strpos($k, 'text_channel') === 0)
        return 'متن‌های پشتیبانی و آموزش';
    if (strpos($k, 'text_wheel') === 0 || strpos($k, 'text_dice') === 0)
        return 'متن‌های گردونه شانس';
    if (strpos($k, 'text_usertest') === 0 || strpos($k, 'crontest') === 0)
        return 'متن‌های اکانت تست';
    if (strpos($k, 'cart') !== false || strpos($k, 'payment') !== false || strpos($k, 'pay') !== false || strpos($k, 'zarinp') !== false)
        return 'متن‌های پرداخت';
    if (strpos($k, 'textafter') === 0 || strpos($k, 'textmanual') === 0 || strpos($k, 'textselectlocation') === 0)
        return 'متن‌های بعد از خرید';
    if (strpos($k, 'text_discount') === 0 || strpos($k, 'text_add_balance') === 0)
        return 'تخفیف و کیف پول';
    return 'سایر';
}

$flash = ['ok' => '', 'err' => ''];


if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!hash_equals($csrf, (string)($_POST['_csrf'] ?? ''))) {
        http_response_code(403); exit('درخواست معتبر نیست.');
    }
    $action = $_POST['_action'] ?? '';

    if ($action === 'export') {
        $export=[];
        try { $rr=$pdo->query("SELECT id_text,text FROM textbot ORDER BY id_text ASC"); foreach(($rr?$rr->fetchAll(PDO::FETCH_ASSOC):[]) as $row)$export[(string)$row['id_text']]=(string)$row['text']; } catch (\Throwable $e) {}
        header('Content-Type: application/json; charset=utf-8');
        header('Content-Disposition: attachment; filename=itzaydin-texts-'.date('Ymd-His').'.json');
        header('Cache-Control: no-store');
        echo json_encode(['product'=>'iTzAYDiN-BOT','exported_at'=>date(DATE_ATOM),'texts'=>$export],JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT);
        exit;
    }
    elseif ($action === 'save') {
        $newValues = $_POST['t'] ?? [];
        if (!is_array($newValues)) $newValues = [];


        $cur = [];
        $r = $pdo->query("SELECT id_text, text FROM textbot");
        if ($r) {
            foreach ($r->fetchAll(PDO::FETCH_ASSOC) as $row) {
                $cur[(string)$row['id_text']] = (string)$row['text'];
            }
        }

        $updated = 0;
        foreach ($newValues as $key => $val) {
            $key = (string)$key;
            $val = (string)$val;
            if (!isset($cur[$key])) continue;
            if ($cur[$key] === $val) continue;
            try {
                $upd = $pdo->prepare("UPDATE textbot SET text = :v WHERE id_text = :k");
                $upd->execute([':v' => $val, ':k' => $key]);
                $updated++;
            } catch (\Throwable $e) {
                $flash['err'] = $e->getMessage();
                error_log('[panel/textbot] update failed for ' . $key . ': ' . $e->getMessage());
            }
        }
        header('Location: textbot.php?saved=' . $updated);
        exit;
    }
    elseif ($action === 'add') {
        $key = trim((string)($_POST['new_key'] ?? ''));
        $val = (string)($_POST['new_val'] ?? '');


        $errors = [];
        if ($key === '') {
            $errors[] = 'کلید نمی‌تواند خالی باشد.';
        } elseif (!preg_match('/^[A-Za-z0-9_ـ]{2,100}$/u', $key)) {
            $errors[] = 'کلید فقط می‌تواند شامل حروف، عدد و آندرلاین باشد (۲ تا ۱۰۰ کاراکتر).';
        } elseif (mb_strlen($val) > 4000) {
            $errors[] = 'متن بیش از حد طولانی است (حداکثر ۴۰۰۰ کاراکتر).';
        }

        if (!empty($errors)) {
            $flash['err'] = '• ' . implode("<br>• ", array_map(fn($e) => htmlspecialchars($e, ENT_QUOTES, 'UTF-8'), $errors));
        } else {
            try {
                $ins = $pdo->prepare("INSERT INTO textbot (id_text, text) VALUES (:k, :v)
                                      ON DUPLICATE KEY UPDATE text = VALUES(text)");
                $ins->execute([':k' => $key, ':v' => $val]);
                header('Location: textbot.php?added=' . urlencode($key));
                exit;
            } catch (\Throwable $e) {
                $flash['err'] = 'افزودن ناموفق: ' . $e->getMessage();
            }
        }
    }
    elseif ($action === 'delete') {
        $key = (string)($_POST['key'] ?? '');
        if ($key !== '') {
            try {
                $d = $pdo->prepare("DELETE FROM textbot WHERE id_text = :k");
                $d->execute([':k' => $key]);
                header('Location: textbot.php?deleted=' . urlencode($key));
                exit;
            } catch (\Throwable $e) {
                $flash['err'] = 'حذف انجام نشد: ' . $e->getMessage();
            }
        }
    }
    elseif ($action === 'premium_add') {
        $emoji = trim((string)($_POST['emoji'] ?? ''));
        $cid = trim((string)($_POST['custom_emoji_id'] ?? ''));
        $label = trim((string)($_POST['label'] ?? 'Web Text Studio'));
        if ($emoji === '' || $cid === '') $flash['err'] = 'Emoji و Custom Emoji ID هر دو لازم‌اند.';
        else {
            try {
                $validation = function_exists('aycore_validate_custom_emoji_id') ? aycore_validate_custom_emoji_id($cid) : ['ok'=>true];
                if (empty($validation['ok'])) throw new RuntimeException('Telegram این Custom Emoji ID را تأیید نکرد: ' . ($validation['error'] ?? 'unknown'));
                $now=time();
                $stmt=$pdo->prepare("INSERT INTO premium_emojis(emoji,custom_emoji_id,label,created_at,updated_at) VALUES(:e,:c,:l,:created_at,:updated_at) ON DUPLICATE KEY UPDATE label=VALUES(label),updated_at=VALUES(updated_at),custom_emoji_id=VALUES(custom_emoji_id)");
                $stmt->execute([':e'=>$emoji,':c'=>$cid,':l'=>$label,':created_at'=>$now,':updated_at'=>$now]);
                try{$pdo->exec("UPDATE setting SET premium_emoji_status='1'");}catch(\Throwable $e){}
                if(function_exists('getPremiumEmojiMap'))getPremiumEmojiMap(true);
                header('Location: textbot.php?premium=added#premium'); exit;
            } catch (\Throwable $e) { $flash['err']='ذخیره Premium Emoji ناموفق: '.$e->getMessage(); }
        }
    }
    elseif ($action === 'premium_test') {
        global $adminnumber;
        $cid=trim((string)($_POST['custom_emoji_id']??''));
        if($cid==='') $flash['err']='Custom Emoji ID برای تست خالی است.';
        else {
            $validation=function_exists('aycore_validate_custom_emoji_id')?aycore_validate_custom_emoji_id($cid):['ok'=>false,'error'=>'validator unavailable'];
            if(empty($validation['ok'])) {
                $flash['err']='❌ اعتبارسنجی Telegram: '.htmlspecialchars((string)($validation['error']??'ناموفق'),ENT_QUOTES,'UTF-8');
            } else {
                $fallback=(string)(($validation['emoji']??'')?:'⭐');
                $target=(string)($adminnumber??'');
                if($target!=='' && function_exists('aycore_test_custom_emoji_rendering')) {
                    $live=aycore_test_custom_emoji_rendering($target,$fallback,$cid);
                    if(!empty($live['ok'])) {
                        $flash['ok']='✅ تست واقعی ارسال شد و Telegram Custom Emoji را پذیرفت. پیام تست را در چت ادمین بررسی کن.';
                    } else {
                        $stage=htmlspecialchars((string)($live['stage']??'unknown'),ENT_QUOTES,'UTF-8');
                        $why=htmlspecialchars((string)($live['error']??'Telegram rejected custom emoji'),ENT_QUOTES,'UTF-8');
                        $hint=htmlspecialchars((string)($live['hint']??'مالک واقعی Bot در BotFather باید Telegram Premium داشته باشد، یا Bot شرایط Fragment را داشته باشد.'),ENT_QUOTES,'UTF-8');
                        $flash['err']="❌ Live Render رد شد — Stage: <code>{$stage}</code><br>Reason: <code>{$why}</code><br>💡 {$hint}";
                    }
                } else {
                    $flash['ok']='✅ Custom Emoji ID معتبر است. برای Live Render از داخل تلگرام دکمه «🧪 تست» را بزن؛ شناسه ادمین در Web Panel در دسترس نبود.';
                }
            }
        }
    }
    elseif ($action === 'premium_delete') {
        $pid=(int)($_POST['premium_id']??0);
        if($pid>0){try{$pdo->prepare("DELETE FROM premium_emojis WHERE id=:id")->execute([':id'=>$pid]);header('Location: textbot.php?premium=deleted#premium');exit;}catch(\Throwable $e){$flash['err']='حذف انجام نشد: '.$e->getMessage();}}
    }
}

$premiumRows=[];
try {$premiumRows=$pdo->query("SELECT * FROM premium_emojis ORDER BY updated_at DESC,id DESC LIMIT 300")->fetchAll(PDO::FETCH_ASSOC)?:[];} catch (\Throwable $e) {}

$rows = [];
try {
    $r = $pdo->query("SELECT id_text, text FROM textbot ORDER BY id_text ASC");
    if ($r) $rows = $r->fetchAll(PDO::FETCH_ASSOC);
} catch (\Throwable $e) {
    $flash['err'] = 'بارگذاری متن‌ها ناموفق: ' . $e->getMessage();
}


$grouped = [];
foreach ($rows as $row) {
    $g = aycore_text_group((string)$row['id_text']);
    if (!isset($grouped[$g])) $grouped[$g] = [];
    $grouped[$g][] = $row;
}

$preferredOrder = [
    'متن‌های شروع و راهنما',
    'متن دکمه‌های خرید و تمدید',
    'متن دکمه‌های حساب کاربری',
    'متن‌های اکانت تست',
    'متن‌های نمایندگی و زیرمجموعه',
    'تخفیف و کیف پول',
    'متن‌های پرداخت',
    'متن‌های بعد از خرید',
    'متن‌های پشتیبانی و آموزش',
    'متن‌های گردونه شانس',
    'سایر',
];
$orderedGrouped = [];
foreach ($preferredOrder as $g) {
    if (isset($grouped[$g])) { $orderedGrouped[$g] = $grouped[$g]; unset($grouped[$g]); }
}
foreach ($grouped as $g => $items) $orderedGrouped[$g] = $items;

$savedNum = isset($_GET['saved']) ? (int)$_GET['saved'] : -1;
$addedKey = isset($_GET['added']) ? (string)$_GET['added'] : '';
$delKey   = isset($_GET['deleted']) ? (string)$_GET['deleted'] : '';
?>
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
    <title>iTz Text Studio | پنل iTzAYDiN-BOT</title>
    <link rel="stylesheet" href="css/theme.css">
    <link rel="stylesheet" href="css/admin-extra.css">
    <link rel="stylesheet" href="css/ay-controls.css">
    <script src="js/theme.js" defer>

</script>
    <style>
        .text-grp { margin-bottom: 22px; }
        .text-grp__title {
            font-size: 13px;
            color: var(--text-muted);
            font-weight: 700;
            margin: 0 4px 8px;
            display: flex;
            align-items: center;
            gap: 8px;
        }
        .text-grp__title::before {
            content: "";
            width: 4px; height: 16px;
            background: var(--accent);
            border-radius: 4px;
        }
        .text-row {
            background: var(--surface-2);
            border: 1px solid var(--border-soft);
            border-radius: 10px;
            padding: 12px 14px;
            margin-bottom: 8px;
            display: grid;
            grid-template-columns: 220px 1fr auto;
            gap: 14px;
            align-items: start;
            transition: border-color .15s ease;
        }
        .text-row:hover { border-color: var(--border-mid); }
        .text-key {
            font-family: 'JetBrains Mono', monospace;
            font-size: 12px;
            color: var(--accent);
            direction: ltr;
            text-align: left;
            padding-top: 8px;
            word-break: break-all;
        }
        .text-row textarea {
            width: 100%;
            background: var(--surface-3);
            border: 1px solid var(--border-mid);
            border-radius: 8px;
            color: var(--text-main);
            padding: 9px 12px;
            font-family: 'Arad', sans-serif;
            font-size: 13.5px;
            min-height: 44px;
            resize: vertical;
            line-height: 1.7;
        }
        .text-row textarea:focus {
            outline: none;
            border-color: var(--accent);
            box-shadow: 0 0 0 3px var(--accent-glow);
        }
        .text-row textarea.changed {
            border-color: var(--color-warning);
            background: var(--color-warning-soft);
        }
        @media (max-width: 768px) {
            .text-row {
                grid-template-columns: 1fr;
                gap: 8px;
            }
            .text-key { padding-top: 0; font-size: 11px; }
        }
        .save-bar {
            position: sticky;
            bottom: 0;
            margin-top: 24px;
            padding: 14px 0;
            background: linear-gradient(180deg, transparent, var(--bg-grad-bot) 30%);
            display: flex;
            gap: 12px;
            justify-content: flex-end;
            z-index: 5;
        }
        .filter-bar {
            display: flex; gap: 10px; flex-wrap: wrap;
            align-items: center;
            margin-bottom: 16px;
        }
        .filter-bar input {
            flex: 1 1 240px;
            min-width: 200px;
            padding: 10px 14px;
            background: var(--surface-2);
            border: 1px solid var(--border-mid);
            border-radius: 10px;
            color: var(--text-main);
            font-family: 'Arad', sans-serif;
            font-size: 13.5px;
        }
        .filter-bar input:focus {
            outline: none;
            border-color: var(--accent);
            box-shadow: 0 0 0 3px var(--accent-glow);
        }
        .text-row.hidden { display: none; }
    </style>
</head>
<body>

<section id="container">
    <?php include("header.php"); ?>

    <section id="main-content">
        <div class="wrapper">

            <div class="page-head">
                <div>
                    <div class="page-head__title">
                        <?php echo icon('text', 'svg-icon svg-lg'); ?>
                        iTz Text Studio
                    </div>
                    <div class="page-head__sub">جستجو و ویرایش پیام‌ها + مدیریت Premium Emoji؛ نسخه تلگرامی هم از داخل «تنظیم متن ربات» همین موتور را استفاده می‌کند.</div>
                </div>
                <div>
                    <button class="btn btn-outline" onclick="openModal('modal-add-text')">
                        <?php echo icon('plus', 'svg-icon svg-sm'); ?>
                        <span>افزودن کلید جدید</span>
                    </button>
                </div>
            </div>

            <?php if ($savedNum > 0): ?>
                <div class="alert" style="background:var(--color-success-soft); border:1px solid var(--color-success); color:var(--color-success); padding:12px 16px; border-radius:10px; margin-bottom:18px; display:flex; align-items:center; gap:10px;">
                    <?php echo icon('circle-check', 'svg-icon'); ?>
                    <span><?php echo $savedNum; ?> متن به‌روزرسانی شد.</span>
                </div>
            <?php elseif ($savedNum === 0): ?>
                <div class="alert" style="background:var(--surface-3); border:1px solid var(--border-mid); padding:12px 16px; border-radius:10px; margin-bottom:18px;">
                    تغییری انجام نشد.
                </div>
            <?php endif; ?>
            <?php if ($addedKey !== ''): ?>
                <div class="alert" style="background:var(--color-success-soft); border:1px solid var(--color-success); color:var(--color-success); padding:12px 16px; border-radius:10px; margin-bottom:18px;">
                    کلید جدید <code><?php echo htmlspecialchars($addedKey, ENT_QUOTES); ?></code> افزوده شد.
                </div>
            <?php endif; ?>
            <?php if ($delKey !== ''): ?>
                <div class="alert" style="background:var(--color-warning-soft); border:1px solid var(--color-warning); color:var(--color-warning); padding:12px 16px; border-radius:10px; margin-bottom:18px;">
                    کلید <code><?php echo htmlspecialchars($delKey, ENT_QUOTES); ?></code> حذف شد.
                </div>
            <?php endif; ?>
            <?php if ($flash['err']): ?>
                <div class="alert" style="background:var(--color-danger-soft); border:1px solid var(--color-danger); color:var(--color-danger); padding:12px 16px; border-radius:10px; margin-bottom:18px;">
                    <?php echo htmlspecialchars($flash['err'], ENT_QUOTES, 'UTF-8'); ?>
                </div>
            <?php endif; ?>

            <div class="filter-bar">
                <input type="search" id="searchBox" placeholder="مثلاً: خرید، تمدید، پشتیبانی، text_start…">
                <span class="chip" id="visibleCount"><?php echo count($rows); ?> نتیجه</span>
                <a class="btn btn-outline btn-sm" href="#premium">🌟 Premium Emoji</a><form method="post" style="display:inline"><input type="hidden" name="_csrf" value="<?php echo htmlspecialchars($csrf, ENT_QUOTES); ?>"><button class="btn btn-outline btn-sm" name="_action" value="export">⬇️ خروجی متن‌ها</button></form>
            </div>

            <form method="POST" action="textbot.php" id="textForm">
                <input type="hidden" name="_csrf" value="<?php echo htmlspecialchars($csrf, ENT_QUOTES); ?>">
                <input type="hidden" name="_action" value="save">

                <?php foreach ($orderedGrouped as $groupName => $items): ?>
                    <div class="text-grp">
                        <div class="text-grp__title"><?php echo htmlspecialchars($groupName, ENT_QUOTES, 'UTF-8'); ?></div>
                        <?php foreach ($items as $row):
                            $k = (string)$row['id_text'];
                            $v = (string)$row['text'];
                        ?>
                            <div class="text-row" data-search="<?php echo htmlspecialchars(strtolower($k . ' ' . $v), ENT_QUOTES); ?>">
                                <code class="text-key"><?php echo htmlspecialchars($k, ENT_QUOTES); ?></code>
                                <textarea name="t[<?php echo htmlspecialchars($k, ENT_QUOTES); ?>]"
                                        data-orig="<?php echo htmlspecialchars($v, ENT_QUOTES); ?>"
                                        rows="1"><?php echo htmlspecialchars($v, ENT_QUOTES, 'UTF-8'); ?></textarea>
                                <div style="display:flex; flex-direction:column; gap:6px;">
                                    <button type="button" class="btn btn-sm btn-soft-danger"
                                            onclick='deleteKey(<?php echo json_encode($k, JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_QUOT); ?>)'
                                            title="حذف این کلید">
                                        <?php echo icon('trash', 'svg-icon'); ?>
                                    </button>
                                </div>
                            </div>
                        <?php endforeach; ?>
                    </div>
                <?php endforeach; ?>

                <div class="save-bar">
                    <span id="changeCount" style="align-self:center; color:var(--text-muted); font-size:13px; margin-inline-end:auto;">۰ تغییر در انتظار ذخیره</span>
                    <button type="submit" class="btn btn-primary">
                        <?php echo icon('check', 'svg-icon svg-sm'); ?>
                        <span>ذخیره تغییرات</span>
                    </button>
                </div>
            </form>

            <div class="card" id="premium" style="margin-top:26px">
                <div class="card__head"><div class="card__title">🌟 Premium Emoji Registry</div><span class="chip"><?php echo count($premiumRows); ?> mapping</span></div>
                <div style="padding:14px 16px;color:var(--text-muted);font-size:12.5px;line-height:1.9">
                    داخل تلگرام لازم نیست ID را دستی پیدا کنی: در <b>iTz Text Studio</b> متن را ویرایش کن و Premium Emoji را همان‌جا بفرست؛ Custom Emoji ID از Entity تلگرام خودکار ذخیره می‌شود. V6.1 علاوه بر اعتبارسنجی ID، Live Render واقعی می‌زند و پیام‌های بدون <code>parse_mode</code> را هم با MessageEntity پشتیبانی می‌کند. <b>نکته:</b> برای ارسال Custom Emoji، مالک واقعی Bot در BotFather باید Telegram Premium فعال داشته باشد (یا Bot شرایط Fragment را داشته باشد).
                </div>
                <form method="post" style="padding:0 16px 14px;display:grid;grid-template-columns:120px 1fr 1fr auto;gap:8px;align-items:end">
                    <input type="hidden" name="_csrf" value="<?php echo htmlspecialchars($csrf, ENT_QUOTES); ?>"><input type="hidden" name="_action" value="premium_add">
                    <div><label class="form-label">Emoji fallback</label><input class="form-control" name="emoji" placeholder="🔥" required></div>
                    <div><label class="form-label">Custom Emoji ID</label><input class="form-control" name="custom_emoji_id" style="direction:ltr" required></div>
                    <div><label class="form-label">برچسب</label><input class="form-control" name="label" placeholder="مثلاً text_start"></div>
                    <button class="btn btn-primary">ذخیره</button>
                </form>
                <div class="table-wrap"><table class="display app-table"><thead><tr><th>Emoji</th><th>Custom ID</th><th>برچسب</th><th>آخرین تغییر</th><th></th></tr></thead><tbody>
                <?php foreach($premiumRows as $pe): ?><tr><td style="font-size:22px"><?php echo htmlspecialchars($pe['emoji']??'',ENT_QUOTES,'UTF-8'); ?></td><td style="direction:ltr"><code><?php echo htmlspecialchars($pe['custom_emoji_id']??'',ENT_QUOTES); ?></code></td><td><?php echo htmlspecialchars($pe['label']??'',ENT_QUOTES,'UTF-8'); ?></td><td><?php echo !empty($pe['updated_at'])?htmlspecialchars(date('Y-m-d H:i',(int)$pe['updated_at']),ENT_QUOTES):'—'; ?></td><td><div style="display:flex;gap:5px;flex-wrap:wrap"><form method="post"><input type="hidden" name="_csrf" value="<?php echo htmlspecialchars($csrf, ENT_QUOTES); ?>"><input type="hidden" name="_action" value="premium_test"><input type="hidden" name="custom_emoji_id" value="<?php echo htmlspecialchars($pe['custom_emoji_id']??'',ENT_QUOTES); ?>"><button class="btn btn-soft-info btn-sm">تست Telegram</button></form><form method="post" onsubmit="return confirm('این mapping حذف شود؟')"><input type="hidden" name="_csrf" value="<?php echo htmlspecialchars($csrf, ENT_QUOTES); ?>"><input type="hidden" name="_action" value="premium_delete"><input type="hidden" name="premium_id" value="<?php echo (int)$pe['id']; ?>"><button class="btn btn-soft-danger btn-sm">حذف</button></form></div></td></tr><?php endforeach; ?>
                </tbody></table></div>
            </div>

        </div>
    </section>
</section>


<div id="modal-add-text" class="modal-overlay">
    <div class="modal-box">
        <div class="modal-head">
            <span class="modal-head__title">افزودن کلید متن جدید</span>
            <button type="button" class="modal-close" onclick="closeModal('modal-add-text')">&times;</button>
        </div>
        <form method="POST" action="textbot.php">
            <input type="hidden" name="_csrf" value="<?php echo htmlspecialchars($csrf, ENT_QUOTES); ?>">
            <input type="hidden" name="_action" value="add">
            <div class="form-group">
                <label class="form-label">کلید (انگلیسی، بدون فاصله)</label>
                <input type="text" name="new_key" class="form-control" style="direction:ltr; font-family:'JetBrains Mono', monospace;" placeholder="text_custom_button" required pattern="[A-Za-z0-9_ـ]+">
            </div>
            <div class="form-group">
                <label class="form-label">متن نمایش (فارسی)</label>
                <textarea name="new_val" class="form-control" rows="3" placeholder="مثلاً: 🔥 پیشنهاد ویژه"></textarea>
            </div>
            <div class="modal-foot">
                <button type="button" class="btn btn-outline btn-sm" onclick="closeModal('modal-add-text')">انصراف</button>
                <button type="submit" class="btn btn-primary btn-sm">افزودن</button>
            </div>
        </form>
    </div>
</div>


<form method="POST" action="textbot.php" id="deleteForm" style="display:none;">
    <input type="hidden" name="_csrf" value="<?php echo htmlspecialchars($csrf, ENT_QUOTES); ?>">
    <input type="hidden" name="_action" value="delete">
    <input type="hidden" name="key" id="deleteKey">
</form>

<script>
function openModal(id) { var m = document.getElementById(id); if (m) m.classList.add('active'); }
function closeModal(id) { var m = document.getElementById(id); if (m) m.classList.remove('active'); }

function deleteKey(k) {
    if (!confirm('کلید «' + k + '» و متن آن حذف شود؟')) return;
    document.getElementById('deleteKey').value = k;
    document.getElementById('deleteForm').submit();
}


(function () {
    var counter = document.getElementById('changeCount');
    var areas = document.querySelectorAll('#textForm textarea');
    function persianNum(n){ return String(n).replace(/\d/g, function(d){ return '۰۱۲۳۴۵۶۷۸۹'[+d]; }); }
    function updateCount() {
        var n = 0;
        areas.forEach(function(t){
            if (t.value !== t.dataset.orig) { t.classList.add('changed'); n++; }
            else t.classList.remove('changed');
        });
        counter.textContent = persianNum(n) + ' تغییر در انتظار ذخیره';
    }
    function autogrow(t){
        t.style.height = 'auto';
        t.style.height = Math.max(44, t.scrollHeight) + 'px';
    }
    areas.forEach(function (t) {
        autogrow(t);
        t.addEventListener('input', function () { autogrow(t); updateCount(); });
    });


    var search = document.getElementById('searchBox');
    var rows = document.querySelectorAll('.text-row');
    var groups = document.querySelectorAll('.text-grp');
    search.addEventListener('input', function () {
        var q = search.value.trim().toLowerCase();
        rows.forEach(function (r) {
            r.classList.toggle('hidden', q && r.dataset.search.indexOf(q) === -1);
        });

        groups.forEach(function (g) {
            var any = g.querySelectorAll('.text-row:not(.hidden)').length > 0;
            g.style.display = any ? '' : 'none';
        });
        var visible = document.querySelectorAll('.text-row:not(.hidden)').length;
        var count = document.getElementById('visibleCount');
        if (count) count.textContent = visible + ' نتیجه';
    });
})();
</script>
<script>
(function(){
  var form=document.querySelector('form[data-text-form], form#textForm') || document.querySelector('form[action="textbot.php"]');
  var areas=[].slice.call(document.querySelectorAll('.text-row textarea'));
  var initial=new Map(areas.map(function(a){return[a,a.value]}));
  var badge=document.createElement('span');badge.id='ayDirtyCount';badge.className='chip';badge.style.cssText='position:fixed;left:16px;bottom:18px;z-index:80;display:none;box-shadow:0 10px 30px rgba(0,0,0,.35)';document.body.appendChild(badge);
  function dirty(){var n=0;areas.forEach(function(a){if(a.value!==initial.get(a))n++;});badge.textContent=n+' تغییر ذخیره‌نشده';badge.style.display=n?'inline-flex':'none';}
  areas.forEach(function(a){a.addEventListener('input',dirty);});
  window.addEventListener('beforeunload',function(e){var n=0;areas.forEach(function(a){if(a.value!==initial.get(a))n++;});if(n){e.preventDefault();e.returnValue='';}});
})();
</script></body>
</html>


