<?php

use Acms\Services\Update\Database\Schema;

class ACMS_POST_Fix_DbIndex extends ACMS_POST_Fix
{
    function post()
    {
        if (!sessionWithAdministration()) {
            die403();
        }

        @set_time_limit(0);

        $schema = new Schema(dsn());

        // ALTER 権限がなければインデックスを追加できないため、事前に確認して明示的に知らせる
        if ($schema->checkAlterSystemTablePermission() === false) {
            $this->Post->set('message', 'alter_privilege_error');
            AcmsLogger::warning('データ修正ツールで、インデックス修正を試みたが ALTER 権限が不足していた');
            return $this->Post;
        }

        // スキーマ定義と現在のインデックスを比較し、不足しているインデックスのみ追加する。
        // 既存インデックスの DROP はしない（PRIMARY 消失や作成失敗によるインデックス欠落を避ける）。
        foreach ($schema->listUp($schema->define) as $table) {
            $missing = $schema->compareIndex($table);
            $schema->makeIndex($table, $missing);
        }

        $this->Post->set('message', 'success');
        AcmsLogger::info('データ修正ツールで、不足しているデータベースインデックスを追加しました');

        return $this->Post;
    }
}
