import Foundation
import Vision
import AppKit

if CommandLine.arguments.count < 2 {
    fputs("Usage: ocr_vision <image1> [image2 ...]\n", stderr)
    exit(1)
}

for path in CommandLine.arguments.dropFirst() {
    let url = URL(fileURLWithPath: path)
    let request = VNRecognizeTextRequest { request, error in
        if let error = error {
            print("=====FILE:\(path)=====")
            print("[OCR_ERROR] \(error.localizedDescription)")
            return
        }
        let observations = request.results as? [VNRecognizedTextObservation] ?? []
        var lines: [String] = []
        for observation in observations {
            if let candidate = observation.topCandidates(1).first {
                let s = candidate.string.trimmingCharacters(in: .whitespacesAndNewlines)
                if !s.isEmpty { lines.append(s) }
            }
        }
        print("=====FILE:\(path)=====")
        print(lines.joined(separator: "\n"))
    }
    request.recognitionLevel = .accurate
    request.usesLanguageCorrection = true
    request.recognitionLanguages = ["zh-Hans", "zh-Hant", "en-US"]
    let handler = VNImageRequestHandler(url: url, options: [:])
    do {
        try handler.perform([request])
    } catch {
        print("=====FILE:\(path)=====")
        print("[OCR_EXCEPTION] \(error.localizedDescription)")
    }
}
