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

// 오류 메시지 출력 억제 (실제 운영 환경에서는 로그에 기록되도록 설정)
ini_set('display_errors', 0);
ini_set('log_errors', 1);
error_reporting(E_ALL);

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

$tablename = isset($_REQUEST['tablename']) ? $_REQUEST['tablename'] : 'output';
$safeGroupCode = isset($_REQUEST['safeGroupCode']) ? $_REQUEST['safeGroupCode'] : '';

// JSON 데이터를 저장할 경로 설정
$jsonFilePath = "../output/qc_json/" . $safeGroupCode . ".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);
        }
        
        echo json_encode([
            'num'                => $safeGroupCode,
            'message'            => 'JSON data is empty. JSON file deleted and database updated.',
            'realiList_jsondata' => $realiList_jsondata
        ], JSON_UNESCAPED_UNICODE);
        exit;
    }
    
    // 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;
}

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

echo json_encode($data, JSON_UNESCAPED_UNICODE);
?>
