<?php
// fix_meeting_db.php
// meeting_logs 테이블의 id 컬럼에 AUTO_INCREMENT 속성을 추가하고
// 중복된 id=0 레코드를 수정하는 스크립트

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

// DB 연결 설정
$host = '127.0.0.1';
$dbname = 'checker'; // .env를 로드하지 못할 경우를 대비한 기본값
$username = 'root';
$password = 'root';

echo "Database Fix Script for meeting_logs\n";
echo "=====================================\n";

// 1. .env 파일 로드 시도
$envPath = __DIR__ . '/../.env';
if (file_exists($envPath)) {
    echo "Loading .env file...\n";
    $lines = file($envPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    foreach ($lines as $line) {
        if (strpos($line, '#') === 0) continue;
        list($name, $value) = explode('=', $line, 2);
        $_ENV[trim($name)] = trim($value);
    }
    
    if (isset($_ENV['DB_HOST'])) $host = $_ENV['DB_HOST'];
    if (isset($_ENV['DB_NAME'])) $dbname = $_ENV['DB_NAME'];
    if (isset($_ENV['DB_USER'])) $username = $_ENV['DB_USER'];
    if (isset($_ENV['DB_PASSWORD'])) $password = $_ENV['DB_PASSWORD'];
} else {
    echo "Warning: .env file not found. Using default credentials.\n";
}

// 2. DB 연결
try {
    echo "Connecting to database ($host, $dbname)...\n";
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully.\n";
    
    // 3. 중복된 ID 확인 (id=0)
    echo "Checking for duplicate id=0 in meeting_logs...\n";
    $stmt = $pdo->query("SELECT COUNT(*) FROM meeting_logs WHERE id = 0");
    $count = $stmt->fetchColumn();
    echo "Found $count records with id=0.\n";
    
    if ($count > 0) {
        // 4. MAX(id) 확인
        $stmt = $pdo->query("SELECT MAX(id) FROM meeting_logs");
        $maxId = $stmt->fetchColumn();
        if (!$maxId) $maxId = 0;
        echo "Current MAX(id) is $maxId.\n";
        
        // 5. id=0인 레코드들 업데이트
        $stmt = $pdo->query("SELECT * FROM meeting_logs WHERE id = 0");
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        $newId = $maxId + 1;
        foreach ($rows as $row) {
            // 중복된 id=0 레코드를 삭제하고 새로운 ID로 다시 삽입하는 것이 안전함
            // (PRIMARY KEY 제약 조건 때문에 UPDATE가 실패할 수 있음)
            
            // 데이터 복사
            $insertSql = "INSERT INTO meeting_logs (tenant_id, user_id, title, audio_file_path, transcript_text, summary_text, created_at, file_expiry_date) 
                          VALUES (:tenant_id, :user_id, :title, :audio_file_path, :transcript_text, :summary_text, :created_at, :file_expiry_date)";
            
            $insertStmt = $pdo->prepare($insertSql);
            $insertStmt->execute([
                ':tenant_id' => $row['tenant_id'],
                ':user_id' => $row['user_id'],
                ':title' => $row['title'],
                ':audio_file_path' => $row['audio_file_path'],
                ':transcript_text' => $row['transcript_text'],
                ':summary_text' => $row['summary_text'],
                ':created_at' => $row['created_at'],
                ':file_expiry_date' => $row['file_expiry_date']
            ]);
            
            echo "Moved record (old id=0) to new id=" . $pdo->lastInsertId() . "\n";
        }
        
        // 원래 id=0 레코드 삭제
        $pdo->exec("DELETE FROM meeting_logs WHERE id = 0");
        echo "Deleted old records with id=0.\n";
    }
    
    // 6. AUTO_INCREMENT 속성 추가
    echo "Applying AUTO_INCREMENT to meeting_logs.id...\n";
    try {
        $pdo->exec("ALTER TABLE meeting_logs MODIFY id INT AUTO_INCREMENT PRIMARY KEY");
        echo "Success: AUTO_INCREMENT applied.\n";
    } catch (PDOException $e) {
        // 이미 설정되어 있거나 다른 문제가 있는 경우
        echo "Note: " . $e->getMessage() . "\n";
        
        // PRIMARY KEY가 이미 있다면 MODIFY만 시도
        try {
            $pdo->exec("ALTER TABLE meeting_logs MODIFY id INT AUTO_INCREMENT");
            echo "Success: Mofified column to AUTO_INCREMENT.\n";
        } catch (PDOException $e2) {
             echo "Error applying AUTO_INCREMENT: " . $e2->getMessage() . "\n";
        }
    }
    
    echo "Done.\n";
    
} catch (PDOException $e) {
    echo "Database Error: " . $e->getMessage() . "\n";
    exit(1);
}
?>
