package com.immunetechguard.afis;
import com.google.gson.*;
import com.machinezoo.sourceafis.*;
import java.io.*;import java.nio.charset.StandardCharsets;import java.util.*;
public class Main {
 private static final Gson gson=new Gson();
 public static void main(String[] args)throws Exception{
  try{
   String input=new String(System.in.readAllBytes(),StandardCharsets.UTF_8);JsonObject r=JsonParser.parseString(input).getAsJsonObject();String op=r.get("operation").getAsString();JsonObject out=new JsonObject();out.addProperty("ok",true);
   if(op.equals("extract")){
    byte[] image=Base64.getDecoder().decode(r.get("image_base64").getAsString());FingerprintTemplate t=new FingerprintTemplate(new FingerprintImage(image));out.addProperty("template_base64",Base64.getEncoder().encodeToString(t.toByteArray()));out.addProperty("quality_score",quality(image));out.addProperty("engine","SourceAFIS-Java");
   }else if(op.equals("match")){
    FingerprintTemplate probe=new FingerprintTemplate(Base64.getDecoder().decode(r.get("probe_template_base64").getAsString()));FingerprintTemplate candidate=new FingerprintTemplate(Base64.getDecoder().decode(r.get("candidate_template_base64").getAsString()));double score=new FingerprintMatcher(probe).match(candidate);out.addProperty("score",score);out.addProperty("engine","SourceAFIS-Java");
   }else throw new IllegalArgumentException("Unsupported operation");
   System.out.print(gson.toJson(out));
  }catch(Exception e){JsonObject out=new JsonObject();out.addProperty("ok",false);out.addProperty("error",e.getMessage());System.out.print(gson.toJson(out));System.exit(1);}
 }
 private static double quality(byte[] image){return image.length>20000?80.0:image.length>8000?55.0:25.0;}
}
