package com.reactlibrary.util;

import android.content.Context;
import android.util.JsonReader;
import android.util.JsonWriter;
import android.util.Log;

import com.reactlibrary.model.Connection;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import static com.reactlibrary.view.ListConnectionActivity.versionList;

/**
 * Created by selvaanb on 1/23/2018.
 */

public class FileUtil {

    public static boolean isFileExist = false;

    public static void addToFile(Context context)  {

        String destPath = null;
        File destFolder = context.getFilesDir();
        destPath = destFolder + File.separator + "my-sample.json";
        File destFile = new File(destPath);

        try {
            isFileExist = true;
            FileWriter writer = new FileWriter(destFile);
            JsonWriter jsonWriter = new JsonWriter(writer);
            serializeConnectionToFile(jsonWriter);
            writer.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        if(destFile.exists()){
            Log.d("File","File Existss");
        }

    }


    private static void deleteFileContent(String abslPath) throws FileNotFoundException {
        FileOutputStream writer = new FileOutputStream(abslPath);
        try {
            writer.write(("").getBytes());
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public static void serializeConnectionToFile(JsonWriter jsonWriter) {
        try {
            jsonWriter.beginArray();
            for (Connection conn:versionList) {
                jsonWriter.beginObject();
                jsonWriter.name("name").value(conn.getName());
                jsonWriter.name("connection").value(conn.getConnectionUrl());
                jsonWriter.endObject();

            }
            jsonWriter.endArray();
            jsonWriter.flush();

        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public static boolean isFileExistInDevice(Context context){
        File destFolder = context.getFilesDir();
        String abslPath = destFolder + File.separator+ "my-sample.json";
        File destFile = new File(abslPath);
        return destFile.exists();
    }

    public static void retrieveConnectionListFromFile(Context context) {
        File destFolder = context.getFilesDir();
        String abslPath = destFolder + File.separator+ "my-sample.json";
        File destFile = new File(abslPath);
        if(destFile.exists()) {
            try {
                InputStream in = new FileInputStream(abslPath);
                BufferedInputStream bufferedStream = new BufferedInputStream(in);
                InputStreamReader reader = new InputStreamReader(bufferedStream);
                readJSONArrayFromFile(reader);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
     }

    public static void readJSONArrayFromFile(InputStreamReader fileReader) throws IOException {
        JsonReader reader = new JsonReader(fileReader);

        reader.beginArray();
            String connectionName = null;
            String connectionUrl = null;

        while(reader.hasNext()){
            reader.beginObject();
            while (reader.hasNext()){
                String name = reader.nextName();
                switch (name) {
                    case "name":
                        connectionName = reader.nextString();
                        break;
                    case "connection":
                        connectionUrl = reader.nextString();
                        break;
                    default:
                        reader.skipValue();
                        break;
                }

            }
            reader.endObject();
            versionList.add(new Connection(connectionName, connectionUrl));

        }
        reader.endArray();
    }

    public static void addConnectIonListToFile(Context context, ArrayList<Connection> versionList) throws IOException {
        FileUtil.addToFile(context);
        versionList.clear();

    }
}
