<?php
include_once('./_common.php');

header('Content-Type: application/json; charset=UTF-8');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('X-Content-Type-Options: nosniff');

function wn_fail($msg) {
    echo json_encode(['result' => 'fail', 'message' => $msg], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
}

if (!$is_member)                           wn_fail('로그인이 필요합니다.');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') wn_fail('잘못된 요청입니다.');

$od_id   = isset($_POST['od_id'])   ? trim((string)$_POST['od_id'])   : '';
$message = isset($_POST['message']) ? trim((string)$_POST['message']) : '';

if ($od_id === '') wn_fail('주문번호가 필요합니다.');

$safe_mb = sql_escape_string($member['mb_id']);
$safe_od = sql_escape_string($od_id);

// 존재하는 출금 주문인지 확인
$order = sql_fetch(
    "SELECT od_id, od_status FROM g5_shoppoint_order4withdraw
     WHERE od_id='{$safe_od}' AND mb_id='{$safe_mb}' LIMIT 1",
    false
);
if (!$order) wn_fail('출금 주문을 찾을 수 없습니다.');

// ── 메시지 필수 입력 ────────────────────────────────────────────────
if ($message === '') { wn_fail('전달할 내용을 입력해 주세요.'); }

// ── 마지막 요청 조회 (중복·쿨다운 체크) ─────────────────────────────
$last_wn = sql_fetch(
    "SELECT wn_created_at, wn_message FROM g5_withdraw_notify
     WHERE od_id='{$safe_od}' AND mb_id='{$safe_mb}'
     ORDER BY wn_id DESC LIMIT 1",
    false
);
// 동일 내용 중복 요청 → 조용히 성공 처리 (insert 없이 반환)
if ($last_wn !== false && trim((string)($last_wn['wn_message'] ?? '')) === trim($message)) {
    echo json_encode(
        ['result'=>'success','message'=>"출금 확인 요청이 전송되었습니다.\n담당자가 신속하게 확인 후 처리해 드리겠습니다."],
        JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
    );
    exit;
}
// 쿨다운 30분: 조용히 대기 안내 반환
if ($last_wn !== false && strtotime($last_wn['wn_created_at']) > time() - 1800) {
    echo json_encode(
        ['result'=>'success','message'=>"요청이 접수되어 처리 대기 중입니다.\n잠시 후 담당자가 순서대로 확인하겠습니다."],
        JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
    );
    exit;
}
// 총 횟수 제한(10회): 조용히 성공 처리
$exist_cnt = (int)(sql_fetch(
    "SELECT COUNT(*) AS cnt FROM g5_withdraw_notify WHERE od_id='{$safe_od}' AND mb_id='{$safe_mb}'",
    false
)['cnt'] ?? 0);
if ($exist_cnt >= 10) {
    echo json_encode(
        ['result'=>'success','message'=>"요청이 접수되어 처리 대기 중입니다.\n담당자가 순서대로 확인하고 있습니다."],
        JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
    );
    exit;
}

$safe_msg = sql_escape_string(mb_substr($message, 0, 500));
$now = date('Y-m-d H:i:s');

sql_query(
    "INSERT INTO g5_withdraw_notify
      (od_id, mb_id, wn_created_at, wn_message, wn_status)
     VALUES
      ('{$safe_od}', '{$safe_mb}', '{$now}', '{$safe_msg}', '대기')",
    false
);

$notify_text = sql_escape_string(sprintf(
    '[출금확인요청 %s] %s',
    $now, $message !== '' ? $message : '(메시지 없음)'
));
sql_query(
    "UPDATE g5_shoppoint_order4withdraw
     SET od_shop_memo=CONCAT(IFNULL(od_shop_memo,''), '\n', '{$notify_text}')
     WHERE od_id='{$safe_od}'",
    false
);

echo json_encode(
    ['result' => 'success', 'message' => '출금 확인 요청이 전송되었습니다.\n담당자가 신속하게 확인 후 처리해 드리겠습니다.'],
    JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
);
exit;
