<?php
/**
 * 자체 API v2.0 - 토지 데이터 + 면적 조회
 * 서버1: V1data(토지이용계획), V2data(농지), area_master.db(면적)
 *
 * 사용법:
 *   /api/land.php?pnu=1111018300104730001
 */

error_reporting(0);
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    exit;
}

$data_dir = '/var/www/api-own-data';
$area_db = '/var/www/api-own-data/area_master.db';

// 시도코드 → 지역명 매핑 (PNU 첫 2자리)
$sido_map = [
    '11' => 'seoul',
    '26' => 'busan',
    '27' => 'daegu',
    '28' => 'incheon',
    '29' => 'gwangju',
    '30' => 'daejeon',
    '31' => 'ulsan',
    '36' => 'sejong',
    '41' => 'gyeonggi',
    '42' => 'gangwon',
    '43' => 'chungbuk',
    '44' => 'chungnam',
    '45' => 'jeonbuk',
    '46' => 'jeonnam',
    '47' => 'gyeongbuk',
    '48' => 'gyeongnam',
    '50' => 'jeju',
    '51' => 'gangwon',
    '52' => 'jeonbuk'   // 신코드
];

function enc($s)
{
    return mb_convert_encoding(trim($s), 'UTF-8', 'EUC-KR,CP949,UTF-8');
}

// ★ area_master.db에서 면적 조회 (SQLite)
function get_area_from_db($pnu)
{
    global $area_db;
    if (!file_exists($area_db))
        return null;
    try {
        $db = new SQLite3($area_db, SQLITE3_OPEN_READONLY);
        $stmt = $db->prepare('SELECT area_m2 FROM area_master WHERE pnu = ?');
        $stmt->bindValue(1, $pnu, SQLITE3_TEXT);
        $result = $stmt->execute();
        $row = $result->fetchArray(SQLITE3_NUM);
        $db->close();
        return $row ? round((float) $row[0], 2) : null;
    } catch (Exception $e) {
        return null;
    }
}

// CSV에서 토지 정보 검색 (grep 방식)
function search_v1($file, $pnu, $max = 100)
{
    if (!file_exists($file))
        return [];
    $esc = escapeshellarg($pnu);
    $out = shell_exec("LC_ALL=C grep -am {$max} {$esc} " . escapeshellarg($file));
    if (empty($out))
        return [];
    $rows = [];
    foreach (explode("\n", trim($out)) as $line) {
        $c = str_getcsv($line);
        if (count($c) < 16)
            continue;
        $rows[] = [
            'pnu' => trim($c[0]),
            'dong_code' => trim($c[1]),
            'dong_name' => enc($c[2]),
            'ledger' => enc($c[4]),
            'jibun' => trim($c[5]),
            'zone_code' => trim($c[9]),
            'zone_name' => enc($c[10]),
            'jimok' => enc($c[15]),
            'price_m2' => trim(str_replace("\r", '', $c[16] ?? '0')),
        ];
    }
    return $rows;
}

// === 요청 처리 ===
$pnu = isset($_GET['pnu']) ? trim($_GET['pnu']) : '';
$dong = isset($_GET['dong']) ? trim($_GET['dong']) : '';

if (empty($pnu) && empty($dong)) {
    echo json_encode([
        'status' => 'info',
        'msg' => 'Land API v2.0 (area_master.db 통합)',
        'usage' => '/api/land.php?pnu=1111018300104730001'
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

if (!empty($pnu)) {
    // PNU 형식 검증
    if (!preg_match('/^\d{19}$/', $pnu)) {
        echo json_encode(['status' => 'error', 'msg' => 'PNU는 19자리 숫자여야 합니다'], JSON_UNESCAPED_UNICODE);
        exit;
    }

    $sido = substr($pnu, 0, 2);
    $region = isset($sido_map[$sido]) ? $sido_map[$sido] : null;
    if (!$region) {
        echo json_encode(['status' => 'error', 'msg' => '알 수 없는 시도코드: ' . $sido], JSON_UNESCAPED_UNICODE);
        exit;
    }

    // ① V1 + V2 조회 (병렬 grep)
    $v1_file = "{$data_dir}/V1data/V1data-{$region}.csv";
    $v2_file = "{$data_dir}/V2data/V2data-{$region}.csv";
    $v1 = search_v1($v1_file, $pnu);
    $v2 = search_v1($v2_file, $pnu);

    // ② ★ area_master.db에서 면적 조회
    $area_m2 = get_area_from_db($pnu);
    $area_py = $area_m2 ? round($area_m2 / 3.3058, 1) : null;

    echo json_encode([
        'status' => 'ok',
        'pnu' => $pnu,
        'region' => $region,
        'area_m2' => $area_m2,   // ★ 자체 면적 데이터 (㎡)
        'area_py' => $area_py,   // ★ 평 환산
        'v1' => $v1,
        'v1_count' => count($v1),
        'v2' => $v2,
        'v2_count' => count($v2),
    ], JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE);

} else {
    // 동이름 검색 (기존 기능 유지)
    $dong_enc = mb_convert_encoding($dong, 'EUC-KR', 'UTF-8');
    $v1f = glob("{$data_dir}/V1data/V1data-*.csv");
    $found = [];
    $region = '';
    foreach ($v1f as $f) {
        $region = str_replace(['V1data-', '.csv'], '', basename($f));
        $found = search_v1($f, $dong_enc, 100);
        if (!empty($found))
            break;
    }
    echo json_encode([
        'status' => 'ok',
        'dong' => $dong,
        'region' => $region,
        'v1' => $found,
        'v1_count' => count($found),
    ], JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE);
}
?>