package ar.labs.androidml;

import androidx.appcompat.app.AppCompatActivity;

import android.content.res.AssetFileDescriptor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import org.tensorflow.lite.DataType;
import org.tensorflow.lite.Interpreter;
import org.tensorflow.lite.support.tensorbuffer.TensorBuffer;

import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Arrays;

import ar.labs.androidml.ml.Model1;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn= findViewById(R.id.button);
        TextView tv= findViewById(R.id.textView);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try{
                    EditText inputEditText;

                    inputEditText = findViewById(R.id.editTextNumberDecimal);
                    Float data= Float.parseFloat(inputEditText.getText().toString());
                    ByteBuffer byteBuffer= ByteBuffer.allocateDirect(1*4);
                    byteBuffer.putFloat(data);
                    byteBuffer.rewind();
                    System.out.println("#############################-");
                    System.out.println(data+"\n"+Arrays.toString(byteBuffer.array())
                            + "\nPosition: " + byteBuffer.position()
                            + "\nLimit: " + byteBuffer.limit());


                    float[] input = new float[1];
                    float[] output = new float[1];
                    output[0]=4f;input[0]=data;

                    try (Interpreter interpreter = new Interpreter(loadModelFile())) {
                        interpreter.run(input[0], output[0]);
                        interpreter.close();
                    }
                    tv.setText(String.valueOf(output[0]));

            }
                catch (Exception e)
                {
                    Toast.makeText(getApplicationContext(), e.getMessage().toString(),Toast.LENGTH_LONG).show();
                }
            }
        });
    }



    public MappedByteBuffer loadModelFile() throws IOException {
        String MODEL_ASSETS_PATH = "model1.tflite";
        AssetFileDescriptor assetFileDescriptor = getApplicationContext().getAssets().openFd(MODEL_ASSETS_PATH) ;
        FileInputStream fileInputStream = new FileInputStream( assetFileDescriptor.getFileDescriptor() ) ;
        FileChannel fileChannel = fileInputStream.getChannel() ;
        long startoffset = assetFileDescriptor.getStartOffset() ;
        long declaredLength = assetFileDescriptor.getDeclaredLength() ;
        return fileChannel.map( FileChannel.MapMode.READ_ONLY , startoffset , declaredLength ) ;
    }

}