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

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

header("Content-Type: application/json");

$num = isset($_REQUEST['num']) ? $_REQUEST['num'] : '';
$tablename = isset($_REQUEST['tablename']) ? $_REQUEST['tablename'] : 'output';
$ACIaskDate = isset($_REQUEST['ACIaskDate']) ? $_REQUEST['ACIaskDate'] : '';
$ACIdoneDate = isset($_REQUEST['ACIdoneDate']) ? $_REQUEST['ACIdoneDate'] : '';

// JSON 데이터를 저장할 경로 설정
$jsonFilePath = "../output/real_json/" . $num . ".json";

/**
 * 모든 필드가 빈 값인지 확인하는 함수
 * 각 항목은 객체 형태로 저장되며,
 * - 일반 입력 요소: 'value' 값이 빈 문자열인지,
 * - 체크박스: 'checked'가 '1'이 아닌지 확인합니다.
 */
function isAllEmpty($data) {
    $keys = ['inputValue', 'beforeWidth', 'beforeHeight', 'afterWidth', 'afterHeight', 'recordComent', 'exceptCheck'];
    foreach ($keys as $key) {
        if (isset($data[$key]) && is_array($data[$key])) {
            foreach ($data[$key] as $item) {
                // 일반 입력 요소의 경우
                if (isset($item['value']) && trim($item['value']) !== '') {
                    return false;
                }
                // 체크박스의 경우 (값이 '1'이면 체크된 상태)
                if (isset($item['checked']) && $item['checked'] === '1') {
                    return false;
                }
            }
        }
    }
    return true;
}

if (isset($_POST['realiList'])) {
    $realiList_jsondata = json_decode($_POST['realiList'], true);

    if ($realiList_jsondata === null && json_last_error() !== JSON_ERROR_NONE) {
        echo json_encode([
            'error'      => 'Invalid JSON data provided.',
            'json_error' => json_last_error_msg()
        ], JSON_UNESCAPED_UNICODE);
        // 기존 JSON 파일 삭제
        if (file_exists($jsonFilePath)) {
            unlink($jsonFilePath);
        }
        exit;
    }
    
    // 만약 모든 데이터가 빈 값이라면, JSON 파일을 삭제하고 DB 업데이트 시 빈 값으로 처리
    if (isAllEmpty($realiList_jsondata)) {
        if (file_exists($jsonFilePath)) {
            unlink($jsonFilePath);
        }
        
        // 데이터베이스 업데이트: realiList 필드를 빈 값으로 저장
        require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
        $pdo = db_connect();
        try {
            $pdo->beginTransaction();
            $sql = "UPDATE {$DB}.{$tablename} SET realiList=? WHERE num=? LIMIT 1";
            $stmh = $pdo->prepare($sql);
            $stmh->bindValue(1, '', PDO::PARAM_STR); // 빈 값 저장
            $stmh->bindValue(2, $num, PDO::PARAM_STR);
            $stmh->execute();
            $pdo->commit();
        } catch (PDOException $Exception) {
            $pdo->rollBack();
            error_log("오류: " . $Exception->getMessage());
            echo json_encode(['error' => $Exception->getMessage()], JSON_UNESCAPED_UNICODE);
            exit;
        }
        
        echo json_encode([
            'num'                => $num,
            'message'            => 'JSON data is empty. JSON file deleted and database updated.',
            'realiList_jsondata' => $realiList_jsondata
        ], JSON_UNESCAPED_UNICODE);
        exit;
    }
    
    // 기존 JSON 파일 삭제 (덮어쓰기 위해)
    if (file_exists($jsonFilePath)) {
        unlink($jsonFilePath);
    }
    
    // JSON 데이터를 파일에 저장
    $saveResult = file_put_contents($jsonFilePath, json_encode($realiList_jsondata, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
    if ($saveResult === false) {
        echo json_encode(['error' => 'Failed to write JSON file.'], JSON_UNESCAPED_UNICODE);
        exit;
    }
} else {
    echo json_encode(['error' => 'No realiList data provided.'], JSON_UNESCAPED_UNICODE);
    exit;
}

require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();

try {
    $pdo->beginTransaction();
    // 데이터베이스에 JSON 파일 경로 저장
    $sql = "UPDATE {$DB}.{$tablename} SET realiList=? WHERE num=? LIMIT 1";
    $stmh = $pdo->prepare($sql);
    $stmh->bindValue(1, $jsonFilePath, PDO::PARAM_STR);
    $stmh->bindValue(2, $num, PDO::PARAM_STR);
    $stmh->execute();
    $pdo->commit();
} catch (PDOException $Exception) {
    $pdo->rollBack();
    error_log("오류: " . $Exception->getMessage());
    echo json_encode(['error' => $Exception->getMessage()], JSON_UNESCAPED_UNICODE);
    exit;
}

$data = [
    'num'                => $num,
    'realiList source'   => $_POST['realiList'],
    'json_file'          => $jsonFilePath,
    'realiList_jsondata' => $realiList_jsondata,
    'message'            => 'JSON data saved to file and database updated successfully.'
];

echo json_encode($data, JSON_UNESCAPED_UNICODE);
?>
