/*
 * Copyright 2016 Nissan Ahmed
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package me.ni554n.rebootrouter;

import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputEditText;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;

/**
 * Activity represents View for the MVP pattern.
 * It can't have any business logic.
 * View should request to the Presenter to do the work except UI tasks.
 */
public class RouterActivity extends AppCompatActivity
        implements RouterContract.View, View.OnClickListener, TextWatcher {

    private RouterContract.Presenter routerPresenter;
    private CoordinatorLayout coordinatorLayout;
    private TextInputEditText gatewayEditText;
    private TextInputEditText usernameEditText;
    private TextInputEditText passwordEditText;
    private RouterFields routerFields;
    private int snackbarColor;
    private boolean fieldsHasChanged;

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

        coordinatorLayout = (CoordinatorLayout) findViewById(R.id.layout_coordinator);

        gatewayEditText = (TextInputEditText) findViewById(R.id.input_gateway);
        gatewayEditText.addTextChangedListener(this);

        usernameEditText = (TextInputEditText) findViewById(R.id.input_username);
        usernameEditText.addTextChangedListener(this);

        passwordEditText = (TextInputEditText) findViewById(R.id.input_password);
        passwordEditText.addTextChangedListener(this);

        routerPresenter = new RouterPresenter(this);
        routerPresenter.setupFields();

        snackbarColor = ResourcesCompat.getColor(getResources(), R.color.colorPrimaryDark, null);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.fab) {

            if (fieldsHasChanged) {
                String gateway = gatewayEditText.getText().toString();
                String username = usernameEditText.getText().toString();
                String password = passwordEditText.getText().toString();

                routerFields = new RouterFields(gateway, username, password);

                routerPresenter.rebootRouter(routerFields, true);
                fieldsHasChanged = false;
            } else {
                routerPresenter.rebootRouter(routerFields, false);
            }
        }
    }

    @Override
    protected void onDestroy() {
        routerPresenter.destroyInstances();
        super.onDestroy();
    }

    @Override
    public Context getContext() {
        return this;
    }

    @Override
    public void setFields(RouterFields routerFields) {
        this.routerFields = routerFields;

        gatewayEditText.setText(routerFields.getGateway());
        usernameEditText.setText(routerFields.getUsername());
        passwordEditText.setText(routerFields.getPassword());
    }

    @Override
    public void showMessage(int resId) {
        Snackbar snackbar = Snackbar.make(coordinatorLayout,
                this.getString(resId),
                Snackbar.LENGTH_LONG);
        snackbar.getView().setBackgroundColor(snackbarColor);
        snackbar.show();
    }

    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    @Override
    public void afterTextChanged(Editable editable) {
        fieldsHasChanged = true;
    }
}

@@ -1991,24 +1991,123 @@
 rdinator);%0A%0A
+        snackbarColor = ResourcesCompat.getColor(getResources(), R.color.colorPrimaryDark, null);%0A%0A
         gate
@@ -2602,107 +2602,8 @@
 );%0A%0A
-        snackbarColor = ResourcesCompat.getColor(getResources(), R.color.colorPrimaryDark, null);%0A%0A
     
@@ -2816,17 +2816,16 @@
 .fab) %7B%0A
-%0A
         

Fix Snackbar coloring issue