import pathlib
import pexpect
import shlex


password = pathlib.Path("/home/aaron/.secrets/beget-sftp-password.txt").read_text().strip()
php = r"""
global $wpdb;
$needles = [
    "Можно с детьми",
    "Дальние туры",
    "Рыбалка",
    "Острова и пляжи",
    "Шопинг и мастер-классы",
];
$result = [];
foreach ($needles as $needle) {
    $like = "%" . $wpdb->esc_like($needle) . "%";
    $posts = $wpdb->get_results(
        $wpdb->prepare(
            "SELECT ID, post_type, post_title, post_name FROM {$wpdb->posts}
             WHERE post_title LIKE %s OR post_content LIKE %s OR post_excerpt LIKE %s
             ORDER BY ID DESC LIMIT 30",
            $like,
            $like,
            $like
        ),
        ARRAY_A
    );
    $meta = $wpdb->get_results(
        $wpdb->prepare(
            "SELECT pm.post_id, pm.meta_key, p.post_type, p.post_title
             FROM {$wpdb->postmeta} pm
             LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
             WHERE pm.meta_value LIKE %s
             ORDER BY pm.meta_id DESC LIMIT 60",
            $like
        ),
        ARRAY_A
    );
    $options = $wpdb->get_col(
        $wpdb->prepare(
            "SELECT option_name FROM {$wpdb->options}
             WHERE option_value LIKE %s
             ORDER BY option_id DESC LIMIT 30",
            $like
        )
    );
    $result[$needle] = [
        "posts" => $posts,
        "meta" => $meta,
        "options" => $options,
    ];
}
echo wp_json_encode($result, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
"""

remote = (
    "php8.2 /usr/local/bin/wp-cli.phar "
    "--path=/home/m/max9581h/max9581h.beget.tech/public_html "
    "eval "
    + shlex.quote(php)
    + " 2>/dev/null"
)
command = (
    "ssh -o StrictHostKeyChecking=accept-new "
    "max9581h_aaronseo@max9581h.beget.tech "
    + shlex.quote(remote)
)
child = pexpect.spawn("/bin/bash", ["-lc", command], encoding="utf-8", timeout=120)
match = child.expect(["[Pp]assword:", pexpect.EOF, pexpect.TIMEOUT])
if match == 0:
    child.sendline(password)
    child.expect(pexpect.EOF)
print(child.before)
