/*
 * Copyright (c) 2017 - sikulix.com - MIT license
 */

package com.sikulix.core;

import com.sikulix.api.Picture;
import net.sourceforge.tess4j.Tesseract1;
import net.sourceforge.tess4j.TesseractException;

import java.io.File;

/**
 * Implements all text search and OCR features using Tesseract via Tess4J
 */
public class TextFinder {

  private static final SXLog log = SX.getSXLog("SX.TextFinder");

  private Tesseract1 tess = null;
  private String datapath = SX.getSXSYSAPPDATA() + "/Sikulix/SikulixTesseract";
  private boolean valid = false;

  public TextFinder() {
    init();
  }

  public TextFinder(String datapath) {
    this.datapath = datapath;
    init();
  }

  private void init() {
    tess = new Tesseract1();
    valid = setTessdata();
    if (valid) {
      log.trace("init: tessdata = %s", datapath);
    }
  }

  private boolean setTessdata() {
    File tessdata = new File(datapath, "tessdata");
    if (tessdata.exists()) {
      tess.setDatapath(datapath);
      return true;
    } else  {
      log.error("init: tessdata not found: %s", tessdata);
    }
    return false;
  }

  public boolean isValid() {
    return valid;
  }

  public String read(Picture picture) {
    if (valid) {
      try {
        return tess.doOCR(picture.get());
      } catch (TesseractException e) {
        log.error("read: %s", e.getMessage());
      }
    } else {
      log.error("read: TextFinder not valid");
    }
    return "did not work";
  }

}