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

header('Content-Type: application/json; charset=utf-8');

function json_exit($success, $message, $data = array()) {
	echo json_encode(array_merge(array('success' => $success, 'message' => $message), $data), JSON_UNESCAPED_UNICODE);
	exit;
}

if (!$is_member || !defined('IS_SELLER') || !IS_SELLER) {
	json_exit(false, '판매자 센터 회원만 이용할 수 있습니다.');
}

$action     = isset($_POST['action']) ? preg_replace('/[^a-z_]/', '', $_POST['action']) : '';
$wr_id_off  = (int)(isset($_POST['wr_id_off']) ? $_POST['wr_id_off'] : 0);
$mb_id_esc  = sql_escape_string($member['mb_id']);

if (!$wr_id_off) json_exit(false, '잘못된 요청입니다.');

// 소유권 확인
$item = sql_fetch("SELECT * FROM g5_write_auction_off WHERE wr_id_off = '{$wr_id_off}' AND mb_id = '{$mb_id_esc}'");
if (!$item['wr_id_off']) json_exit(false, '해당 경매 항목을 찾을 수 없습니다.');

$linked_wr_id = (int)$item['wr_id'];

// ── 기간 연장 ──────────────────────────────────────────────────────────────
if ($action === 'extend') {
	if ((int)$item['auction_on'] !== 1) json_exit(false, '진행 중인 경매만 연장할 수 있습니다.');

	$days = (int)(isset($_POST['days']) ? $_POST['days'] : 0);
	$custom = isset($_POST['custom_end']) ? trim($_POST['custom_end']) : '';

	if ($days > 0) {
		$current_end = $item['wr_2'];
		if (!$current_end || $current_end === '0000-00-00 00:00:00') {
			$current_end = G5_TIME_YMDHIS;
		}
		$new_end_ts  = strtotime($current_end) + $days * 86400;
		$new_end     = date('Y-m-d H:i:s', $new_end_ts);
	} elseif ($custom !== '') {
		$new_end_ts = strtotime($custom);
		if (!$new_end_ts || $new_end_ts <= G5_SERVER_TIME) {
			json_exit(false, '유효하지 않은 날짜이거나 현재 시각 이전입니다.');
		}
		$new_end = date('Y-m-d H:i:s', $new_end_ts);
	} else {
		json_exit(false, '연장 기간을 선택해 주세요.');
	}

	$new_end_esc = sql_escape_string($new_end);
	sql_query("UPDATE g5_write_auction_off SET wr_2 = '{$new_end_esc}' WHERE wr_id_off = '{$wr_id_off}'");
	if ($linked_wr_id) {
		sql_query("UPDATE g5_write_auction SET wr_2 = '{$new_end_esc}' WHERE wr_id = '{$linked_wr_id}'");
	}

	json_exit(true, '경매 종료일이 ' . date('Y-m-d H:i', $new_end_ts) . ' 으로 연장됐습니다.', array('new_end' => $new_end));
}

// ── 경매 취소 ──────────────────────────────────────────────────────────────
if ($action === 'cancel') {
	$bid_count = (int)sql_fetch("SELECT COUNT(*) as cnt FROM g5_write_auction_tender WHERE wr_id = '{$linked_wr_id}'")['cnt'];
	$notify    = (isset($_POST['notify']) && $_POST['notify'] === '1');

	// 입찰자에게 취소 쪽지 발송
	if ($notify && $bid_count > 0 && $linked_wr_id) {
		$sub_arr = explode('|', (string)$item['wr_subject']);
		$pcnum_disp = 'RPC-A' . trim((string)$item['pcnum']);
		$spec = isset($sub_arr[1]) ? trim($sub_arr[1]) : '';
		$cancel_msg_esc = sql_escape_string(
			"[경매 취소 안내]\n\n" .
			"입찰하신 아래 경매가 판매자 사정으로 취소됐습니다.\n\n" .
			"· PC 번호: {$pcnum_disp}\n" .
			"· PC 스펙: {$spec}\n\n" .
			"이용에 불편을 드려 죄송합니다."
		);
		$bidders = sql_query("SELECT DISTINCT mb_id FROM g5_write_auction_tender WHERE wr_id = '{$linked_wr_id}'");
		while ($bidder = sql_fetch_array($bidders)) {
			$recv = sql_escape_string($bidder['mb_id']);
			$me_id = 'au_cancel_' . uniqid();
			$me_id_esc = sql_escape_string($me_id);
			sql_query("INSERT INTO {$g5['memo_table']} (me_id, me_recv_mb_id, me_send_mb_id, me_send_datetime, me_memo, me_read_datetime)
				VALUES ('{$me_id_esc}', '{$recv}', '{$mb_id_esc}', '".G5_TIME_YMDHIS."', '{$cancel_msg_esc}', '0000-00-00 00:00:00')");
			sql_query("UPDATE {$g5['member_table']} SET memo = memo + 1 WHERE mb_id = '{$recv}'", false);
		}
	}

	// 상태 업데이트
	sql_query("UPDATE g5_write_auction_off SET auction_on = 0 WHERE wr_id_off = '{$wr_id_off}'");
	if ($linked_wr_id) {
		sql_query("UPDATE g5_write_auction SET wr_8 = '3' WHERE wr_id = '{$linked_wr_id}' AND wr_8 = '1'");
		sql_query("UPDATE g5_write_auction_tender SET td_status = '3' WHERE wr_id = '{$linked_wr_id}'");
	}

	$msg = '경매가 취소됐습니다.';
	if ($notify && $bid_count > 0) $msg .= ' 입찰자 ' . $bid_count . '명에게 취소 쪽지를 발송했습니다.';
	json_exit(true, $msg);
}

// ── 쪽지 발송 ──────────────────────────────────────────────────────────────
if ($action === 'memo') {
	$target  = isset($_POST['target']) ? preg_replace('/[^a-z]/', '', $_POST['target']) : 'winner';
	$message = isset($_POST['message']) ? trim($_POST['message']) : '';

	if ($message === '') json_exit(false, '메시지를 입력해 주세요.');
	if (mb_strlen($message) > 2000) json_exit(false, '메시지가 너무 깁니다. (최대 2000자)');

	$msg_esc = sql_escape_string($message);

	if ($target === 'winner') {
		$winner_mb_id = trim((string)$item['wr_10']);
		if ($winner_mb_id === '') json_exit(false, '낙찰자가 없습니다.');
		$recipients = array($winner_mb_id);
	} elseif ($target === 'all') {
		if (!$linked_wr_id) json_exit(false, '입찰자 정보를 찾을 수 없습니다.');
		$bid_res = sql_query("SELECT DISTINCT mb_id FROM g5_write_auction_tender WHERE wr_id = '{$linked_wr_id}'");
		$recipients = array();
		while ($r = sql_fetch_array($bid_res)) $recipients[] = $r['mb_id'];
		if (empty($recipients)) json_exit(false, '입찰자가 없습니다.');
	} else {
		json_exit(false, '잘못된 대상입니다.');
	}

	$sent = 0;
	foreach ($recipients as $recv_mb_id) {
		$recv = sql_escape_string($recv_mb_id);
		$me_id = 'au_' . uniqid();
		$me_id_esc = sql_escape_string($me_id);
		sql_query("INSERT INTO {$g5['memo_table']} (me_id, me_recv_mb_id, me_send_mb_id, me_send_datetime, me_memo, me_read_datetime)
			VALUES ('{$me_id_esc}', '{$recv}', '{$mb_id_esc}', '".G5_TIME_YMDHIS."', '{$msg_esc}', '0000-00-00 00:00:00')");
		sql_query("UPDATE {$g5['member_table']} SET memo = memo + 1 WHERE mb_id = '{$recv}'", false);
		$sent++;
	}

	json_exit(true, $sent . '명에게 쪽지를 발송했습니다.');
}



// ── 개통비 포인트 차감 재시도 (잔액부족으로 납부대기 중인 건) ─────────────
if ($action === 'install_fee_confirm') {
	if ((int)$item['install_fee_status'] === 2) json_exit(false, '이미 포인트 차감 완료된 항목입니다.');
	if ((int)$item['install_fee_status'] === 9) json_exit(false, '면제 처리된 항목입니다.');
	if ((int)$item['install_fee'] <= 0)         json_exit(false, '개통비가 없는 항목입니다.');
	if (empty($item['wr_10']))                  json_exit(false, '낙찰자가 없습니다.');

	$install_fee = (int)$item['install_fee'];
	$winner_esc  = sql_escape_string($item['wr_10']);

	// 낙찰자 포인트 잔액 확인
	$winner_row = sql_fetch("SELECT mb_point FROM {$g5['member_table']} WHERE mb_id='{$winner_esc}'");
	$cur_point  = $winner_row ? (int)$winner_row['mb_point'] : 0;

	if ($cur_point < $install_fee) {
		$short = number_format($install_fee - $cur_point);
		json_exit(false, "포인트 잔액 부족 ({$short}P 추가 필요). 낙찰자에게 포인트 충전을 요청하세요.");
	}

	// 포인트 차감
	insert_point($item['wr_10'], $install_fee * -1,
		"경매품번(RPC-{$item['pcnum']}) 개통비/설치비 차감",
		'@auction', $item['wr_10'], G5_TIME_YMDHISu, 0, 1
	);

	$now_esc = sql_escape_string(G5_TIME_YMDHIS);
	sql_query("UPDATE {$g5['write_auction_off_table']}
	           SET install_fee_status=2, install_fee_paid_at='{$now_esc}'
	           WHERE wr_id_off='{$wr_id_off}'");

	$fee_fmt   = number_format($install_fee);
	$msg_esc   = sql_escape_string(
		"[개통비 납부 완료]\n\n" .
		"RPC-{$item['pcnum']} 개통비 {$fee_fmt}P가 포인트에서 차감되었습니다.\n" .
		"판매자가 서비스를 준비하는 대로 이용하실 수 있습니다."
	);
	$me_id_esc = sql_escape_string('au_fee_' . uniqid());
	sql_query("INSERT INTO {$g5['memo_table']}
	           (me_id,me_recv_mb_id,me_send_mb_id,me_send_datetime,me_memo,me_read_datetime)
	           VALUES('{$me_id_esc}','{$winner_esc}','{$mb_id_esc}','".G5_TIME_YMDHIS."','{$msg_esc}','0000-00-00 00:00:00')");
	sql_query("UPDATE {$g5['member_table']} SET memo=memo+1 WHERE mb_id='{$winner_esc}'", false);

	json_exit(true, "개통비 {$fee_fmt}P 포인트 차감 완료.");
}

// ── 개통비 면제 처리 ────────────────────────────────────────────────────────
if ($action === 'install_fee_waive') {
	if ((int)$item['install_fee_status'] === 2) json_exit(false, '이미 포인트가 차감된 항목은 면제할 수 없습니다.');

	sql_query("UPDATE {$g5['write_auction_off_table']}
	           SET install_fee_status=9
	           WHERE wr_id_off='{$wr_id_off}'");

	if (!empty($item['wr_10'])) {
		$winner_esc = sql_escape_string($item['wr_10']);
		$fee_fmt    = number_format((int)$item['install_fee']);
		$reason_raw = isset($_POST['reason']) ? trim($_POST['reason']) : '';
		$reason_msg = $reason_raw !== '' ? "\n사유: {$reason_raw}" : '';
		$msg_esc    = sql_escape_string(
			"[개통비 면제 안내]\n\n" .
			"RPC-{$item['pcnum']} 개통비 {$fee_fmt}P가 면제 처리됐습니다.{$reason_msg}\n\n" .
			"서비스 이용을 시작해 주세요."
		);
		$me_id_esc = sql_escape_string('au_fee_' . uniqid());
		sql_query("INSERT INTO {$g5['memo_table']}
		           (me_id,me_recv_mb_id,me_send_mb_id,me_send_datetime,me_memo,me_read_datetime)
		           VALUES('{$me_id_esc}','{$winner_esc}','{$mb_id_esc}','".G5_TIME_YMDHIS."','{$msg_esc}','0000-00-00 00:00:00')");
		sql_query("UPDATE {$g5['member_table']} SET memo=memo+1 WHERE mb_id='{$winner_esc}'", false);
	}
	json_exit(true, '개통비 면제 처리가 완료됐습니다.');
}

// ── 개통비 미납 낙찰취소 (수동) ─────────────────────────────────────────────
if ($action === 'install_fee_cancel') {
	if ((int)$item['install_fee_status'] !== 1) json_exit(false, '납부대기(잔액부족) 상태인 항목만 수동 취소할 수 있습니다.');

	sql_query("UPDATE {$g5['write_auction_off_table']} SET install_fee_status=3 WHERE wr_id_off='{$wr_id_off}'");

	if ($linked_wr_id) {
		sql_query("UPDATE {$g5['write_auction_table']} SET wr_8='3' WHERE wr_id='{$linked_wr_id}'");
		$w_esc = sql_escape_string($item['wr_10']);
		sql_query("UPDATE {$g5['write_auction_tender_table']}
		           SET td_status='3' WHERE wr_id='{$linked_wr_id}' AND mb_id='{$w_esc}'");
	}

	if (!empty($item['wr_10'])) {
		$winner_esc = sql_escape_string($item['wr_10']);
		$fee_fmt    = number_format((int)$item['install_fee']);
		$msg_esc    = sql_escape_string(
			"[낙찰 취소 안내]\n\n" .
			"RPC-{$item['pcnum']} 개통비 {$fee_fmt}P 미납으로 낙찰이 취소되었습니다.\n\n" .
			"이의가 있으시면 판매자에게 문의해 주세요."
		);
		$me_id_esc = sql_escape_string('au_fee_' . uniqid());
		sql_query("INSERT INTO {$g5['memo_table']}
		           (me_id,me_recv_mb_id,me_send_mb_id,me_send_datetime,me_memo,me_read_datetime)
		           VALUES('{$me_id_esc}','{$winner_esc}','{$mb_id_esc}','".G5_TIME_YMDHIS."','{$msg_esc}','0000-00-00 00:00:00')");
		sql_query("UPDATE {$g5['member_table']} SET memo=memo+1 WHERE mb_id='{$winner_esc}'", false);
	}
	json_exit(true, '낙찰이 취소됐습니다.');
}

json_exit(false, '알 수 없는 요청입니다.');
