<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
require_once(__DIR__ . '/../lib/mydb.php');

// 권한 체크 (레벨 5 이하만 접근)
if ($level > 5) {
    echo "<script>alert('접근 권한이 없습니다.'); history.back();</script>";
    exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo "<script>alert('잘못된 접근입니다.'); location.href='list.php';</script>";
    exit;
}

$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
$biz_no = isset($_POST['biz_no']) ? trim($_POST['biz_no']) : '';
$company_name = isset($_POST['company_name']) ? trim($_POST['company_name']) : '';
$representative = isset($_POST['representative']) ? trim($_POST['representative']) : '';
$open_date = isset($_POST['open_date']) ? trim($_POST['open_date']) : null;
$address = isset($_POST['address']) ? trim($_POST['address']) : null;
$type = isset($_POST['type']) ? trim($_POST['type']) : null;
$item = isset($_POST['item']) ? trim($_POST['item']) : null;
$issue_date = isset($_POST['issue_date']) ? trim($_POST['issue_date']) : null;

// 필수 필드 검증
if ($id <= 0) {
    echo "<script>alert('잘못된 ID입니다.'); history.back();</script>";
    exit;
}

if (empty($biz_no) || empty($company_name) || empty($representative)) {
    echo "<script>alert('필수 항목을 모두 입력해주세요.'); history.back();</script>";
    exit;
}

// 사업자번호 정규화 (하이픈 제거)
$biz_no_clean = preg_replace('/[^0-9]/', '', $biz_no);
if (strlen($biz_no_clean) !== 10) {
    echo "<script>alert('사업자번호는 10자리여야 합니다.'); history.back();</script>";
    exit;
}

// 사업자번호 체크섬 검증
function validateBusinessNumber($num) {
    if (strlen($num) !== 10) return false;
    
    $checksum = [1, 3, 7, 1, 3, 7, 1, 3, 5];
    $sum = 0;
    
    for ($i = 0; $i < 9; $i++) {
        $sum += intval($num[$i]) * $checksum[$i];
    }
    
    $sum += floor((intval($num[8]) * 5) / 10);
    $lastDigit = (10 - ($sum % 10)) % 10;
    
    return $lastDigit === intval($num[9]);
}

if (!validateBusinessNumber($biz_no_clean)) {
    echo "<script>alert('올바른 사업자등록번호가 아닙니다.'); history.back();</script>";
    exit;
}

// 하이픈 추가된 형식으로 저장
$biz_no_formatted = substr($biz_no_clean, 0, 3) . '-' . substr($biz_no_clean, 3, 2) . '-' . substr($biz_no_clean, 5);

// 날짜 형식 정규화
$open_date = !empty($open_date) ? $open_date : null;
$issue_date = !empty($issue_date) ? $issue_date : null;

// 빈 문자열을 NULL로 변환
$address = !empty($address) ? $address : null;
$type = !empty($type) ? $type : null;
$item = !empty($item) ? $item : null;

try {
    $pdo = db_connect();
    
    // 데이터 존재 확인
    $check_sql = "SELECT id FROM biz_cert WHERE id = :id";
    $check_stmt = $pdo->prepare($check_sql);
    $check_stmt->bindValue(':id', $id, PDO::PARAM_INT);
    $check_stmt->execute();
    
    if (!$check_stmt->fetch()) {
        echo "<script>alert('해당 데이터를 찾을 수 없습니다.'); location.href='list.php';</script>";
        exit;
    }
    
    // 업데이트
    $sql = "UPDATE biz_cert SET 
                biz_no = :biz_no,
                company_name = :company_name,
                representative = :representative,
                open_date = :open_date,
                address = :address,
                type = :type,
                item = :item,
                issue_date = :issue_date
            WHERE id = :id";
    
    $stmt = $pdo->prepare($sql);
    $stmt->bindValue(':biz_no', $biz_no_formatted, PDO::PARAM_STR);
    $stmt->bindValue(':company_name', $company_name, PDO::PARAM_STR);
    $stmt->bindValue(':representative', $representative, PDO::PARAM_STR);
    $stmt->bindValue(':open_date', $open_date, $open_date ? PDO::PARAM_STR : PDO::PARAM_NULL);
    $stmt->bindValue(':address', $address, $address ? PDO::PARAM_STR : PDO::PARAM_NULL);
    $stmt->bindValue(':type', $type, $type ? PDO::PARAM_STR : PDO::PARAM_NULL);
    $stmt->bindValue(':item', $item, $item ? PDO::PARAM_STR : PDO::PARAM_NULL);
    $stmt->bindValue(':issue_date', $issue_date, $issue_date ? PDO::PARAM_STR : PDO::PARAM_NULL);
    $stmt->bindValue(':id', $id, PDO::PARAM_INT);
    
    $stmt->execute();
    
    echo "<script>alert('수정되었습니다.'); location.href='list.php';</script>";
    
} catch (Exception $e) {
    echo "<script>alert('수정 중 오류가 발생했습니다: " . addslashes($e->getMessage()) . "'); history.back();</script>";
}

