<?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 oi_dn_fail($msg) {
    echo json_encode(['result' => 'fail', 'message' => $msg], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
}

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

$od_id             = isset($_POST['od_id'])              ? trim((string)$_POST['od_id'])              : '';
$transfer_datetime = isset($_POST['transfer_datetime'])  ? trim((string)$_POST['transfer_datetime'])  : '';
$used_platform     = (isset($_POST['used_platform_account']) && (string)$_POST['used_platform_account'] === '0') ? 0 : 1;
$alt_bank_name     = isset($_POST['alt_bank_name'])      ? trim((string)$_POST['alt_bank_name'])      : '';
$alt_bank_account  = isset($_POST['alt_bank_account'])   ? trim((string)$_POST['alt_bank_account'])   : '';
$alt_bank_holder   = isset($_POST['alt_bank_holder'])    ? trim((string)$_POST['alt_bank_holder'])    : '';
$alt_depositor     = isset($_POST['alt_depositor_name']) ? trim((string)$_POST['alt_depositor_name']) : '';
$alt_amt_raw       = isset($_POST['alt_deposit_amount']) ? trim((string)$_POST['alt_deposit_amount']) : '';
if ($alt_amt_raw !== '' && !preg_match('/^\d+(\.\d+)?$/', $alt_amt_raw))
    oi_dn_fail('입금액 형식이 올바르지 않습니다. 숫자만 입력해 주세요. (예: 45.11)');
$alt_deposit_amt   = ($alt_amt_raw !== '' && (float)$alt_amt_raw > 0) ? $alt_amt_raw : '0';
$alt_notes         = isset($_POST['alt_notes'])          ? trim((string)$_POST['alt_notes'])          : '';
$memo              = isset($_POST['memo'])               ? trim((string)$_POST['memo'])               : '';
$tz_raw            = isset($_POST['timezone']) ? trim((string)$_POST['timezone']) : 'Asia/Seoul';
$transfer_timezone = (@timezone_open($tz_raw) !== false && $tz_raw !== '') ? $tz_raw : 'Asia/Seoul';

if ($od_id === '')             oi_dn_fail('주문번호가 필요합니다.');
if ($transfer_datetime === '') oi_dn_fail('이체일시를 입력해 주세요.');
if (!$used_platform && $alt_bank_name === '') oi_dn_fail('입금하신 은행명을 입력해 주세요.');

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

$exist_cnt = (int)(sql_fetch(
    "SELECT COUNT(*) AS cnt FROM g5_deposit_notify WHERE od_id='{$safe_od}' AND mb_id='{$safe_mb}'",
    false
)['cnt'] ?? 0);
if ($exist_cnt >= 10) oi_dn_fail('동일 주문에 대한 입금신고는 최대 10회까지만 허용됩니다.');

$order = sql_fetch(
    "SELECT od_id, od_status, od_time FROM g5_shoppoint_order
     WHERE od_id='{$safe_od}' AND mb_id='{$safe_mb}' AND od_settle_case='무통장' LIMIT 1",
    false
);
if (!$order) oi_dn_fail('주문을 찾을 수 없습니다.');
$order_allow_from = date('Y-m-d H:i:s', strtotime($order['od_time']) - 86400);
if ($transfer_datetime < $order_allow_from)
    oi_dn_fail('이체일시는 주문 일시 기준 1일 이전보다 빠를 수 없습니다.');

$safe_datetime   = sql_escape_string($transfer_datetime);
$safe_memo       = sql_escape_string($memo);
$safe_alt_bank   = sql_escape_string($alt_bank_name);
$safe_alt_acct   = sql_escape_string($alt_bank_account);
$safe_alt_holder = sql_escape_string($alt_bank_holder);
$safe_alt_dep    = sql_escape_string($alt_depositor);
$safe_alt_notes  = sql_escape_string($alt_notes);
$transfer_amount = 0;

$now       = date('Y-m-d H:i:s');
$acct_type = $used_platform ? '플랫폼안내계좌' : '별도계좌';
$acct_info = '';
if (!$used_platform) {
    $acct_info = " [{$alt_bank_name} {$alt_bank_account} {$alt_bank_holder}]";
    if ($alt_depositor !== '')             $acct_info .= " 입금자:{$alt_depositor}";
    if ((float)$alt_deposit_amt > 0)      $acct_info .= " 입금액:{$alt_deposit_amt}";
    if ($alt_notes !== '')                 $acct_info .= " 비고:{$alt_notes}";
}

sql_query(
    "INSERT INTO g5_deposit_notify
      (od_id, mb_id, dn_created_at, transfer_datetime, dn_timezone, transfer_amount,
       used_platform_account, alt_bank_name, alt_bank_account, alt_bank_holder,
       alt_depositor_name, alt_deposit_amount, alt_notes, memo, dn_status)
     VALUES
      ('{$safe_od}', '{$safe_mb}', '{$now}', '{$safe_datetime}', '{$transfer_timezone}', {$transfer_amount},
       {$used_platform}, '{$safe_alt_bank}', '{$safe_alt_acct}', '{$safe_alt_holder}',
       '{$safe_alt_dep}', {$alt_deposit_amt}, '{$safe_alt_notes}',
       '{$safe_memo}', '대기')",
    false
);

$notify_text = sql_escape_string(sprintf(
    '[입금확인요청 %s][%s] 이체일시:%s, 이체금액:%d원%s, 메모:%s',
    $now, $acct_type, $transfer_datetime, $transfer_amount, $acct_info, $memo
));
sql_query(
    "UPDATE g5_shoppoint_order
     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;
