package com.varunmishra.storage_inclass;

import android.Manifest;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class MainActivity extends AppCompatActivity {

    public EditText mEditText;
    public static String SHARED_PREF = "my_sharedpref";
    public static String INTERNAL_FILE = "internal-file";
    public static String EXTERNAL_FILE = "external-file.txt";
    public String mInstance = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEditText = (EditText) findViewById(R.id.multilineText);
        if (savedInstanceState != null){
            mInstance = savedInstanceState.getString("state");
        }
        Log.d("TAG", ""+mInstance);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        outState.putString("state", mEditText.getText().toString());

    }

    public void onSaveClickedSP(View v) {
        SharedPreferences sp = getSharedPreferences(SHARED_PREF, 0);
        SharedPreferences.Editor editor = sp.edit();
        editor.putString("text", mEditText.getText().toString());

        editor.commit();

    }

    @Override
    protected void onResume() {
        super.onResume();

        if (Build.VERSION.SDK_INT < 23)
            return;

        if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
            requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},0);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.d("Permission", "Granted");

        } else {
            Log.d("Permission", "Denied");
        }

    }

    public void onLoadClickedSP(View v) {

        SharedPreferences sp = getSharedPreferences(SHARED_PREF, 0);
        mEditText.setText(sp.getString("text",""));

    }

    public void onSaveClickedIS(View v) {

        FileOutputStream fos = null;
        try {
            fos = openFileOutput(INTERNAL_FILE, Context.MODE_PRIVATE);
            fos.write(mEditText.getText().toString().getBytes());
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void onLoadClickedIS(View v) {

        FileInputStream fis = null;
        try {
            fis = openFileInput(INTERNAL_FILE);
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader bufferedReader = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null ){
                sb.append(line);
            }
            mEditText.setText(sb.toString());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }


    public void onSaveClickedES(View v) {
        File file;
        FileOutputStream fos = null;
        file = new File (Environment.getExternalStorageDirectory(), EXTERNAL_FILE);
        try {
            fos = new FileOutputStream(file);
            fos.write(mEditText.getText().toString().getBytes());
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public void onLoadClickedES(View v) {
        File file = new File (Environment.getExternalStorageDirectory(), EXTERNAL_FILE);

        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader bufferedReader = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null ){
                sb.append(line);
                sb.append("\n");
            }
            mEditText.setText(sb.toString());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public void onClearText(View v) {

        mEditText.setText("");
    }
}
