<?php
// 출력 버퍼링 시작
ob_start();
error_reporting(0);

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

// 출력 버퍼 비우기
ob_clean();

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

// 권한 체크
if (!isset($user_id) || $level > 5) {
    echo json_encode(['ok' => false, 'error' => '접근 권한이 없습니다.']);
    exit;
}

// 업무협의 ID 확인
$consult_id = isset($_POST['id']) ? intval($_POST['id']) : 0;
$tenant_id = $user_id; // session.php에서 user_id를 tenant_id로 사용

if ($consult_id <= 0) {
    echo json_encode(['ok' => false, 'error' => '잘못된 요청입니다.']);
    exit;
}

try {
    $pdo = db_connect();
    
    // MVP 단계: 모든 사용자가 모든 데이터를 볼 수 있도록 tenant_id 조건 제거
    $sql = "SELECT audio_file_path FROM consult_logs WHERE id = ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$consult_id]);
    $consult = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$consult) {
        echo json_encode(['ok' => false, 'error' => '업무협의록을 찾을 수 없습니다.']);
        exit;
    }
    
    // 1. 서버 파일 삭제
    if (!empty($consult['audio_file_path'])) {
        $file_path = $_SERVER['DOCUMENT_ROOT'] . $consult['audio_file_path'];
        $file_path = str_replace('\\', '/', $file_path);
        $file_path = preg_replace('#/+#', '/', $file_path);
        
        if (file_exists($file_path)) {
            @unlink($file_path);
        }
        
        // 2. GCS 파일 삭제 (GCS URI인 경우)
        if (strpos($consult['audio_file_path'], 'gs://') === 0) {
            // GCS URI 파싱
            $gcs_uri = $consult['audio_file_path'];
            if (preg_match('#gs://([^/]+)/(.+)#', $gcs_uri, $matches)) {
                $bucket_name = $matches[1];
                $object_name = $matches[2];
                
                // GCS 삭제 함수 호출
                $gcs_deleted = deleteFromGCS($bucket_name, $object_name);
                if (!$gcs_deleted) {
                    error_log('GCS 파일 삭제 실패: ' . $gcs_uri);
                }
            }
        }
    }
    
    // 3. DB에서 삭제 (MVP 단계: tenant_id 조건 제거)
    $delete_sql = "DELETE FROM consult_logs WHERE id = ?";
    $delete_stmt = $pdo->prepare($delete_sql);
    $delete_stmt->execute([$consult_id]);
    
    echo json_encode(['ok' => true, 'message' => '업무협의록이 삭제되었습니다.']);
    
} catch (Exception $e) {
    error_log('업무협의록 삭제 오류: ' . $e->getMessage());
    echo json_encode(['ok' => false, 'error' => '삭제 중 오류가 발생했습니다: ' . $e->getMessage()]);
}

// GCS 파일 삭제 함수
function deleteFromGCS($bucket_name, $object_name, $service_account_path = null) {
    if (!$service_account_path) {
        $service_account_path = $_SERVER['DOCUMENT_ROOT'] . '/apikey/google_service_account.json';
    }
    
    if (!file_exists($service_account_path)) {
        error_log('GCS 삭제 실패: 서비스 계정 파일 없음');
        return false;
    }
    
    $serviceAccount = json_decode(file_get_contents($service_account_path), true);
    if (!$serviceAccount) {
        error_log('GCS 삭제 실패: 서비스 계정 JSON 파싱 오류');
        return false;
    }
    
    // OAuth 2.0 토큰 생성
    $now = time();
    $jwtHeader = base64_encode(json_encode(['alg' => 'RS256', 'typ' => 'JWT']));
    $jwtClaim = base64_encode(json_encode([
        'iss' => $serviceAccount['client_email'],
        'scope' => 'https://www.googleapis.com/auth/devstorage.full_control',
        'aud' => 'https://oauth2.googleapis.com/token',
        'exp' => $now + 3600,
        'iat' => $now
    ]));
    
    $privateKey = openssl_pkey_get_private($serviceAccount['private_key']);
    if (!$privateKey) {
        error_log('GCS 삭제 실패: 개인 키 읽기 오류');
        return false;
    }
    
    openssl_sign($jwtHeader . '.' . $jwtClaim, $signature, $privateKey, OPENSSL_ALGO_SHA256);
    openssl_free_key($privateKey);
    
    $jwt = $jwtHeader . '.' . $jwtClaim . '.' . base64_encode($signature);
    
    // OAuth 토큰 요청
    $tokenCh = curl_init('https://oauth2.googleapis.com/token');
    curl_setopt($tokenCh, CURLOPT_POST, true);
    curl_setopt($tokenCh, CURLOPT_POSTFIELDS, http_build_query([
        'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
        'assertion' => $jwt
    ]));
    curl_setopt($tokenCh, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($tokenCh, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']);
    
    $tokenResponse = curl_exec($tokenCh);
    $tokenCode = curl_getinfo($tokenCh, CURLINFO_HTTP_CODE);
    curl_close($tokenCh);
    
    if ($tokenCode !== 200) {
        error_log('GCS 삭제 실패: OAuth 토큰 요청 실패 (HTTP ' . $tokenCode . ')');
        return false;
    }
    
    $tokenData = json_decode($tokenResponse, true);
    if (!isset($tokenData['access_token'])) {
        error_log('GCS 삭제 실패: OAuth 토큰 없음');
        return false;
    }
    
    $accessToken = $tokenData['access_token'];
    
    // GCS에서 파일 삭제
    $delete_url = 'https://storage.googleapis.com/storage/v1/b/' . 
                  urlencode($bucket_name) . '/o/' . 
                  urlencode($object_name);
    
    $ch = curl_init($delete_url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Bearer ' . $accessToken
    ]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $response = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    // 204 No Content 또는 404 Not Found는 성공으로 간주
    if ($code === 204 || $code === 404) {
        return true;
    } else {
        error_log('GCS 삭제 실패 (HTTP ' . $code . '): ' . $response);
        return false;
    }
}

