<?php
include_once('./_common.php');
include_once(G5_PATH.'/mylib/ikev2_provision.lib.php');

if ($is_guest) {
    alert('판매자센터만 이용가능합니다.', APMS_PARTNER_URL . '/login.php');
}

if ($is_admin !== 'super') {
    alert('최고관리자만 실행할 수 있습니다.', APMS_PARTNER_URL);
}

@set_time_limit(0);

$dry_run = isset($_GET['dry_run']) ? (int)$_GET['dry_run'] : 1; // 기본은 dry-run
$apply = isset($_GET['apply']) ? (int)$_GET['apply'] : 0;
if ($apply === 1) {
    $dry_run = 0;
}
$limit = isset($_GET['limit']) ? (int)$_GET['limit'] : 0; // 0 = 전체

header('Content-Type: text/plain; charset=utf-8');

echo "=== 원격접속 암호 암호화 마이그레이션 (g5_shop_item.it_spec_remote_sw *_PWD__N → VLSEC1:) ===\n";
echo "대상    : VPN 상품 + RPC 일반/경매 상품 (원격제어도구 RustDesk/AnyDesk/TeamViewer 등 포함)\n";
echo "time    : " . G5_TIME_YMDHIS . "\n";
echo "dry_run : {$dry_run}\n";
echo "apply   : {$apply}\n";
echo "limit   : " . ($limit > 0 ? $limit : '전체') . "\n\n";

// 시크릿 유효성 사전 점검 - 유효하지 않으면 암호화가 무의미하므로 중단
$secret = vpnlink_ikev2_secret();
if (!vpnlink_ikev2_has_valid_secret($secret)) {
    echo "[중단] 공유 시크릿이 유효하지 않습니다 (32자 이상 필요).\n";
    echo "mylib/ikev2_secret.php 또는 IKEV2_PROVISION_SHARED_SECRET 환경변수를 확인해 주세요.\n";
    exit;
}
echo "secret  : OK (파일시스템/환경변수 기반, DB 미보관)\n\n";

// VPN(vpn-mall) + RPC 일반/경매 등 it_spec_remote_sw에 *_PWD__N 값을 가진 모든 상품 대상
$sql = " select it_id, it_name, pt_id, it_spec_sales_type, it_spec_remote_sw
           from {$g5['g5_shop_item_table']}
          where it_spec_remote_sw like '%_PWD__%'
          order by it_id ";
if ($limit > 0) {
    $sql .= " limit {$limit} ";
}

$result = sql_query($sql);

$scanned = 0;
$to_encrypt = 0;
$encrypted = 0;
$already = 0;
$failed = 0;

while ($row = sql_fetch_array($result)) {
    $scanned++;
    $json = (string)$row['it_spec_remote_sw'];
    $newJson = vpnlink_remote_sw_json_protect($json);

    if ($newJson === $json) {
        // 변경 없음: 이미 암호화되었거나 암호 필드가 비어있음
        $already++;
        continue;
    }

    $to_encrypt++;
    echo ($dry_run ? "[DRY-RUN] " : "[ENCRYPT] ") . "it_id={$row['it_id']} ({$row['it_name']}, pt_id={$row['pt_id']}, type={$row['it_spec_sales_type']})\n";

    if ($dry_run) {
        continue;
    }

    $ok = sql_query(" update {$g5['g5_shop_item_table']}
                         set it_spec_remote_sw = '" . sql_real_escape_string($newJson) . "'
                       where it_id = '" . sql_real_escape_string((string)$row['it_id']) . "' ", false);
    if ($ok) {
        $encrypted++;
    } else {
        $failed++;
        echo "  -> UPDATE 실패\n";
    }
}

echo "\n--- 결과 ---\n";
echo "검사한 VPN 상품    : {$scanned}건\n";
echo "이미 암호화/대상없음: {$already}건\n";
echo "암호화 대상        : {$to_encrypt}건\n";
if ($dry_run) {
    echo "\n[DRY-RUN] 실제로 변경된 데이터는 없습니다.\n";
    echo "\n실행 가이드:\n";
    echo "1) 우선 dry-run 확인 (기본): ?dry_run=1\n";
    echo "2) 실제 적용: ?apply=1\n";
} else {
    echo "암호화 완료        : {$encrypted}건\n";
    echo "실패               : {$failed}건\n";
}
