package com.maxiee.heartbeat.ui;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

import com.maxiee.heartbeat.R;
import com.maxiee.heartbeat.backup.BackupManager;
import com.maxiee.heartbeat.data.DataManager;
import com.maxiee.heartbeat.database.utils.EventUtils;
import com.maxiee.heartbeat.database.utils.LabelUtils;
import com.maxiee.heartbeat.database.utils.ThoughtUtils;
import com.maxiee.heartbeat.model.Label;
import com.maxiee.heartbeat.model.Thoughts;

/**
 * Created by maxiee on 15-7-29.
 */
public class EntryActivity extends Activity {

    public static final String TAG = EntryActivity.class.getSimpleName();
    public static final String IS_FIRST_USE = "is_first";

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

        if (BackupManager.needTransGallery(EntryActivity.this)) {
            Log.d(TAG, "Need trans!");
            new TransGalleryTask().execute();
        } else {
            Log.d(TAG, "Need not trans!");
            new StartTask().execute();
        }
    }

    private boolean isFirstUse() {
        SharedPreferences sp = getSharedPreferences("hb", MODE_PRIVATE);
        boolean isFirst = sp.getBoolean(IS_FIRST_USE, true);
        if (isFirst) {
            SharedPreferences.Editor editor = sp.edit();
            editor.putBoolean(IS_FIRST_USE, false);
            editor.apply();
            return true;
        }
        return false;
    }

    private class TransGalleryTask extends AsyncTask<Void, Void, Void> {
        ProgressDialog progressDialog;

        @Override
        protected void onPreExecute() {
            progressDialog = new ProgressDialog(EntryActivity.this);
            progressDialog.setMessage(getString(R.string.trans_gallery));
            progressDialog.setCancelable(false);
            progressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... params) {
            BackupManager.backupSD(EntryActivity.this);
            BackupManager.transGallery(EntryActivity.this);
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            progressDialog.cancel();
            new StartTask().execute();
        }
    }

    private class StartTask extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... params) {
            // 首次使用添加引导教程
            if (DataManager.isEventEmpty(EntryActivity.this) && isFirstUse()) {
                Log.d("maxiee", "捕捉到一只新用户!生成引导教程...");
                addTutorial();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            // 手势解锁
            SharedPreferences sp = getSharedPreferences("hb", Context.MODE_PRIVATE);
            String pattern = sp.getString("pattern", "");
            if (pattern.isEmpty()) {
                Intent i = new Intent(EntryActivity.this, MainActivity.class);
                startActivity(i);
                finish();
            } else {
                Intent i = new Intent(EntryActivity.this, PatternActivity.class);
                i.putExtra(PatternActivity.ACTION, PatternActivity.VERIFY);
                startActivity(i);
                finish();
            }
        }
    }

    private void addTutorial() {

        Label label = LabelUtils.addLabel(this, getString(R.string.app_name));
        long eventKey;

        // Tut4
        eventKey = EventUtils.addEvent(this, getString(R.string.tut_4_event), System.currentTimeMillis()).getId();
        LabelUtils.addRelation(this, eventKey, label.getId());
        ThoughtUtils.addThought(
                this, eventKey,
                getString(R.string.tut_4_thought_1),
                Thoughts.Thought.HAS_NO_RES,
                Thoughts.Thought.HAS_NO_PATH
        );
        ThoughtUtils.addThought(
                this, eventKey,
                getString(R.string.tut_4_thought_2),
                Thoughts.Thought.HAS_NO_RES,
                Thoughts.Thought.HAS_NO_PATH
        );
        ThoughtUtils.addThought(
                this, eventKey,
                getString(R.string.tut_4_thought_3),
                Thoughts.Thought.HAS_NO_RES,
                Thoughts.Thought.HAS_NO_PATH
        );
        ThoughtUtils.addThought(
                this, eventKey,
                getString(R.string.tut_4_thought_4),
                Thoughts.Thought.HAS_NO_RES,
                Thoughts.Thought.HAS_NO_PATH
        );

        // Tut3
        eventKey = EventUtils.addEvent(this, getString(R.string.tut_3_event), System.currentTimeMillis()).getId();
        LabelUtils.addRelation(this, eventKey, label.getId());
        ThoughtUtils.addThought(
                this, eventKey,
                getString(R.string.tut_3_thought_1),
                Thoughts.Thought.HAS_NO_RES,
                Thoughts.Thought.HAS_NO_PATH
        );
        ThoughtUtils.addThought(
                this, eventKey,
                getString(R.string.tut_3_thought_2),
                Thoughts.Thought.HAS_NO_RES,
                Thoughts.Thought.HAS_NO_PATH
        );

        // Tut2
        eventKey = EventUtils.addEvent(this, getString(R.string.tut_2_event), System.currentTimeMillis()).getId();
        LabelUtils.addRelation(this, eventKey, label.getId());
        ThoughtUtils.addThought(
                this, eventKey,
                getString(R.string.tut_2_thought_1),
                Thoughts.Thought.HAS_NO_RES,
                Thoughts.Thought.HAS_NO_PATH
        );
        ThoughtUtils.addThought(
                this, eventKey,
                getString(R.string.tut_2_thought_2),
                Thoughts.Thought.HAS_NO_RES,
                Thoughts.Thought.HAS_NO_PATH
        );

        // Tut1
        eventKey = EventUtils.addEvent(this, getString(R.string.tut_1_event), System.currentTimeMillis()).getId();
        LabelUtils.addRelation(this, eventKey, label.getId());
        ThoughtUtils.addThought(
                this, eventKey,
                getString(R.string.tut_1_thought_1),
                Thoughts.Thought.HAS_NO_RES,
                Thoughts.Thought.HAS_NO_PATH
        );
        ThoughtUtils.addThought(
                this, eventKey,
                getString(R.string.tut_1_thought_2),
                Thoughts.Thought.HAS_NO_RES,
                Thoughts.Thought.HAS_NO_PATH
        );
        ThoughtUtils.addThought(
                this, eventKey,
                getString(R.string.tut_1_thought_3),
                Thoughts.Thought.HAS_NO_RES,
                Thoughts.Thought.HAS_NO_PATH
        );
    }
}
