ALTER TABLE drive_items
  ADD COLUMN IF NOT EXISTS ocr_status ENUM('none','pending','processing','completed','error') NOT NULL DEFAULT 'none' AFTER checksum,
  ADD COLUMN IF NOT EXISTS ocr_text MEDIUMTEXT NULL AFTER ocr_status,
  ADD COLUMN IF NOT EXISTS ocr_error TEXT NULL AFTER ocr_text,
  ADD COLUMN IF NOT EXISTS ocr_processed_at DATETIME NULL AFTER ocr_error,
  ADD FULLTEXT INDEX IF NOT EXISTS ft_drive_items_ocr_text (ocr_text);

CREATE TABLE IF NOT EXISTS ocr_jobs (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  item_id BIGINT UNSIGNED NOT NULL,
  owner_id BIGINT UNSIGNED NOT NULL,
  status ENUM('pending','processing','completed','error') NOT NULL DEFAULT 'pending',
  attempts TINYINT UNSIGNED NOT NULL DEFAULT 0,
  last_error TEXT NULL,
  started_at DATETIME NULL,
  finished_at DATETIME NULL,
  created_at DATETIME NOT NULL,
  updated_at DATETIME NOT NULL,
  CONSTRAINT fk_ocr_jobs_item FOREIGN KEY(item_id) REFERENCES drive_items(id) ON DELETE CASCADE,
  CONSTRAINT fk_ocr_jobs_owner FOREIGN KEY(owner_id) REFERENCES users(id) ON DELETE CASCADE,
  UNIQUE KEY uq_ocr_jobs_item(item_id),
  INDEX idx_ocr_jobs_status_created(status,created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- AJUSTE OCR: libera tarefas que esgotaram as tentativas antes da correção.
UPDATE ocr_jobs
SET status='pending',attempts=0,last_error=NULL,started_at=NULL,finished_at=NULL,updated_at=NOW()
WHERE status='error';

UPDATE drive_items i
INNER JOIN ocr_jobs j ON j.item_id=i.id
SET i.ocr_status='pending',i.ocr_error=NULL,i.updated_at=NOW()
WHERE j.status='pending' AND i.ocr_status='error';
