<?php
/**
 * adm/uninstall_kakao5.php
 * - 알림톡 관련 DB 정리 페이지
 * - 관리자 계정에서만 사용해 주세요. 
 * - 다운로드 후 adm 폴더에 업로드 후 사용하시고 삭제 후 파일을 제거하시면 됩니다.
 * - GET: 삭제 버튼 + 대상 목록 / POST: 삭제 실행
 */
$sub_menu = '100000';
include_once('./_common.php');
$g5['title'] = '알림톡 관련 DB 제거';
auth_check_menu($auth, $sub_menu, "w");
require_once G5_ADMIN_PATH . '/admin.head.php';

$prefix = defined('G5_TABLE_PREFIX') ? G5_TABLE_PREFIX : '';
$prefix_shop = defined('G5_SHOP_TABLE_PREFIX') ? G5_SHOP_TABLE_PREFIX : '';

// ───────────────────────────────────────────────────────────────
// 테이블명
// ───────────────────────────────────────────────────────────────
$tbl_config         = $prefix . 'config';
$tbl_member         = $prefix . 'member';
$tbl_board          = $prefix . 'board';
$tbl_stock_sms      = $prefix_shop . 'item_stocksms';
$tbl_kakao_preset   = $prefix . 'kakao5_preset';
$tbl_kakao_phistory = $prefix . 'kakao5_preset_history';

// ───────────────────────────────────────────────────────────────
// 삭제 대상
// ───────────────────────────────────────────────────────────────
$targets_columns = [
    [$tbl_config, 'cf_kakaotalk_use',       '알림톡 사용여부'],
    [$tbl_config, 'cf_popbill_userid',      '팝빌 UserID'],
    [$tbl_config, 'cf_popbill_link_id',     '팝빌 LinkID'],
    [$tbl_config, 'cf_popbill_secretkey',   '팝빌 SecretKey'],
    [$tbl_config, 'cf_kakaotalk_corpnum',   '팝빌 사업자등록번호'],
    [$tbl_config, 'cf_kakaotalk_sender_hp', '팝빌 회신번호'],

    [$tbl_member, 'mb_board_post',          '게시글 등록 알림'],
    [$tbl_member, 'mb_board_reply',         '게시글 답변 알림'],
    [$tbl_member, 'mb_board_comment',       '댓글 등록 알림'],
    [$tbl_member, 'mb_board_recomment',     '대댓글 등록 알림'],

    [$tbl_stock_sms, 'ss_channel',          '재입고 알림 전송 채널'],
    [$tbl_board, 'bo_use_kakaotalk',        '게시판별 알림톡 사용여부'],
];

$targets_tables = [
    [$tbl_kakao_preset,   '알림톡 템플릿/프리셋 관리'],
    [$tbl_kakao_phistory, '알림톡 발송 이력'],
];

// ───────────────────────────────────────────────────────────────
// UI (GET/POST 처리 + CSRF)
// ───────────────────────────────────────────────────────────────
session_start();
if (empty($_SESSION['uninstall_kakao5_token']))
    $_SESSION['uninstall_kakao5_token'] = bin2hex(random_bytes(16));
$csrf_token = $_SESSION['uninstall_kakao5_token'];

// 병합 연산자 → 삼항 연산자로 교체
$do   = isset($_POST['do'])   ? $_POST['do']   : '';
$csrf = isset($_POST['csrf']) ? $_POST['csrf'] : '';

// 컬럼 목록을 테이블별로 그룹화 (표시용)
$cols_by_table = [];
foreach ($targets_columns as $row) {
    $cols_by_table[$row[0]][] = $row; // [$table,$column,$desc]
}

if ($do !== 'delete') {

    echo '<div class="local_desc01 local_desc"><p>아래 항목은 삭제됩니다. 백업 후 진행하십시오.</p></div>';

    // 삭제 실행 버튼
    echo '<div class="btn_confirm01 btn_confirm">
            <form method="post">
                <input type="hidden" name="do" value="delete">
                <input type="hidden" name="csrf" value="'.qesc($csrf_token).'">
                <button type="submit" class="btn btn_01" onclick="return confirm(\'삭제 후 복구 불가합니다.\n진행하시겠습니까?\');">삭제 실행</button>
            </form>
          </div>';

    // 테이블 삭제 대상 (평면 목록)
    echo "<section><h2 class='h2_frm'>테이블 삭제 대상</h2><div class='local_desc01 local_desc'><ul>";
    foreach ($targets_tables as $x) {
        list($t,$d) = $x;
        $badge = table_exists($t) ? '<b style="color:green;">[존재]</b>' : '<b style="color:red;">[없음]</b>';
        echo "<li>{$badge} ".qesc("{$t} ({$d})")."</li>";
    }
    echo '</ul></div></section>';

    // 컬럼 삭제 대상 (테이블별 그룹)
    echo "<section><h2 class='h2_frm'>컬럼 삭제 대상</h2><div class='local_desc01 local_desc'>";
    foreach ($cols_by_table as $table => $cols) {
        echo "<h3 class='h2_frm' style='margin-top:10px;'>".qesc($table)."</h3><ul>";
        foreach ($cols as $r) {
            list($t,$c,$d) = $r;
            $exists = column_exists($t,$c);
            $badge  = $exists ? '<b style="color:green;">[존재]</b>' : '<b style="color:red;">[없음]</b>';
            $label  = "{$t}.{$c} ({$d})";
            echo "<li>{$badge} ".qesc($label)."</li>";
        }
        echo "</ul>";
    }
    echo "</div></section>";

    require_once G5_ADMIN_PATH . '/admin.tail.php';
    exit;
}

// POST: 삭제 실행
if (!hash_equals($_SESSION['uninstall_kakao5_token'], (string)$csrf))
    die('Invalid CSRF token');

echo '<div class="local_desc01 local_desc"><p>삭제 실행 결과</p></div>';

echo '<div class="btn_confirm01 btn_confirm" style="margin-top:15px;">
        <a href="'.qesc($_SERVER['PHP_SELF']).'" class="btn btn_02">뒤로</a>
    </div>';

// 테이블 삭제 결과 (평면 목록)
echo "<section><h2 class='h2_frm'>테이블 삭제 결과</h2><div class='local_desc01 local_desc'><ul>";
drop_table_if_exists($tbl_kakao_preset,   "{$tbl_kakao_preset} (알림톡 템플릿/프리셋 관리)");
drop_table_if_exists($tbl_kakao_phistory, "{$tbl_kakao_phistory} (알림톡 발송 이력)");
echo '</ul></div></section>';

// 컬럼 삭제 결과 (테이블별 그룹)
// drop_column_if_exists()가 <li> 단위로 출력하므로 테이블별로 <>을 열고 그 안에서 호출
echo "<section><h2 class='h2_frm'>컬럼 삭제 결과</h2><div class='local_desc01 local_desc'>";
foreach ($cols_by_table as $table => $cols) {
    echo "<h3 class='h2_frm' style='margin-top:10px;'>".qesc($table)."</h3><ul>";
    foreach ($cols as $r) {
        echo "<li>";
        list($t,$c,$d) = $r;
        drop_column_if_exists($t, $c, "{$t}.{$c} ({$d})");
        echo "</li>";
    }
    echo "</ul>";
}
echo "</div></section>";

require_once G5_ADMIN_PATH . '/admin.tail.php';

// ───────────────────────────────────────────────────────────────
// 함수 (유틸/존재여부/삭제/이스케이프)
// ───────────────────────────────────────────────────────────────

// HTML 이스케이프
function qesc($s){ return htmlspecialchars((string)$s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); }

// 컬럼 존재 여부
function column_exists($table,$column){
    $t=sql_real_escape_string($table); $c=sql_real_escape_string($column);
    $row=sql_fetch("SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='{$t}' AND COLUMN_NAME='{$c}' LIMIT 1");
    return (bool)$row;
}

// 테이블 존재 여부
function table_exists($table){
    $t=sql_real_escape_string($table);
    $row=sql_fetch("SELECT 1 FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='{$t}' LIMIT 1");
    return (bool)$row;
}

// 컬럼 삭제
function drop_column_if_exists($table,$column,$label=''){
    $label=$label?:$table.'.'.$column;
    if(column_exists($table,$column)){
        $result=sql_query("ALTER TABLE `{$table}` DROP COLUMN `{$column}`",true);
        echo $result
            ? "<li><b style='color:green;'>[완료]</b> ".qesc($label)."</li>"
            : "<li><b style='color:red;'>[실패]</b> ".qesc($label)."</li>";
    } else {
        echo "<li><b style='color:red;'>[없음]</b> ".qesc($label)."</li>";
    }
}

// 테이블 삭제
function drop_table_if_exists($table,$label=''){
    $label=$label?:$table;
    if(table_exists($table)){
        $result=sql_query("DROP TABLE `{$table}`",true);
        echo $result
            ? "<li><b style='color:green;'>[완료]</b> ".qesc($label)."</li>"
            : "<li><b style='color:red;'>[실패]</b> ".qesc($label)."</li>";
    } else {
        echo "<li><b style='color:red;'>[없음]</b> ".qesc($label)."</li>";
    }
}
