package com.github.ma1co.pmcademo.app;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

public class InstallActivity extends BaseActivity implements AdapterView.OnItemClickListener {
    protected class SpkListItem extends ListAdapter.ListItem {
        private File file;

        public SpkListItem(File file) {
            this.file = file;
        }

        @Override
        public String getText1() {
            return file.getName();
        }

        public File getFile() {
            return file;
        }
    }

    private ListView listView;
    private File tmpFile;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);

        listView = (ListView) findViewById(R.id.listView);
        listView.setOnItemClickListener(this);

        tmpFile = new File("/data/local/tmp/" + getPackageName() + "/app.1.spk");
    }

    @Override
    protected void onResume() {
        super.onResume();
        updateList(new File(Environment.getExternalStorageDirectory(), "PMCADEMO"));
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        SpkListItem item = (SpkListItem) adapterView.getItemAtPosition(position);
        installPackage(item.getFile());
    }

    protected void updateList(File dir) {
        ArrayList<SpkListItem> items = new ArrayList<SpkListItem>();

        for (File file : dir.listFiles()) {
            if (file.getName().toLowerCase().endsWith(".spk"))
                items.add(new SpkListItem(file));
        }

        listView.setAdapter(new ListAdapter<SpkListItem>(this, items.toArray(new SpkListItem[items.size()])));
    }

    protected void installPackage(File file) {
        try {
            tmpFile.delete();
            tmpFile.getParentFile().mkdirs();
            setPermissions(tmpFile.getParentFile());
            copyFile(file, tmpFile);
            setPermissions(tmpFile);
        } catch (IOException e) {}

        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(tmpFile), "application/vnd.android.package-archive");
        startActivityForResult(intent, 0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        int result = data.getIntExtra("com.sony.scalar.dlsys.scalarainstaller.ResultCode", 0);
        Toast.makeText(this, "Result: " + result, Toast.LENGTH_LONG).show();
    }

    protected void setPermissions(File file) {
        file.setReadable(true, false);
        file.setWritable(true, false);
        file.setExecutable(true, false);
    }

    protected void copyFile(File src, File dst) throws IOException {
        FileInputStream in = new FileInputStream(src);
        FileOutputStream out = new FileOutputStream(dst);
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0)
            out.write(buf, 0, len);
        in.close();
        out.close();
    }
}