package com.powerpoint45.dtube;

import android.Manifest;
import android.app.UiModeManager;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.os.Bundle;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

/**
 * Created by michael on 18/11/17.
 */

public class LoginActivity extends AppCompatActivity {
    SteemitWebView steemitWebView;
    EditText userNameEditText;
    EditText passwordEditText;
    Switch upvoteSwitch;
    Switch followSwitch;

    final int RESULT_QR_CODE = 0;

    boolean runningOnTV;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (Preferences.darkMode)
            setTheme(R.style.AppThemeDark);

        setContentView(R.layout.activity_login);
        userNameEditText = findViewById(R.id.username);
        passwordEditText = findViewById(R.id.password);
        upvoteSwitch = findViewById(R.id.upvote_switch);
        followSwitch = findViewById(R.id.follow_switch);
        steemitWebView = new SteemitWebView(this);

        if (Preferences.darkMode){
            ((ImageView)findViewById(R.id.login_logo)).setImageResource(R.drawable.logo_white);
        }

        //Remove QR button if system has no camera
        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
            ((ViewGroup)findViewById(R.id.password_holder)).removeView(findViewById(R.id.qr_button));
        }

        UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
        assert uiModeManager != null;

        //Customize layout if in TV Mode
        if (uiModeManager.getCurrentModeType()== Configuration.UI_MODE_TYPE_TELEVISION)
            runningOnTV = true;

        //enable link clicks if not on TV
        if (!runningOnTV) {
            ((TextView) findViewById(R.id.upvote_text)).setMovementMethod(LinkMovementMethod.getInstance());
            ((TextView) findViewById(R.id.follow_text)).setMovementMethod(LinkMovementMethod.getInstance());
        }
    }

    public void gotLoginResult(final boolean sucess){
        if (sucess){
            DtubeAPI.saveUserCredentials(userNameEditText.getText().toString(),passwordEditText.getText().toString(), this);
        }
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                userNameEditText.setEnabled(true);
                passwordEditText.setEnabled(true);
                upvoteSwitch.setEnabled(true);
                followSwitch.setEnabled(true);
                Log.d("dtube4", sucess ? "logged in":"login failed");
                if (sucess){
                    finish();
                }else{
                    Toast.makeText(LoginActivity.this, R.string.login_failed,Toast.LENGTH_LONG).show();
                }
            }
        });

    }

    final int CAMERA_REQUEST_PERMISSION = 10;

    public void qrButtonClicked(View v){
        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.CAMERA},
                    CAMERA_REQUEST_PERMISSION);
        }else {
            if (passwordEditText.isEnabled()) {

                Intent qrIntent = new Intent(LoginActivity.this, SimpleScannerActivity.class);
                startActivityForResult(qrIntent, RESULT_QR_CODE);

            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RESULT_QR_CODE){
            if (resultCode == RESULT_OK){
                if (data.getExtras()!=null)
                    passwordEditText.setText(data.getExtras().getString("password"));
                if (userNameEditText.getText().toString().length()>0)
                    loginButtonClicked(new View(this));
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
        switch (requestCode) {
            case CAMERA_REQUEST_PERMISSION: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    qrButtonClicked(new View(this));
                }
            }
        }
    }

    public void loginButtonClicked(View v){
        String username = userNameEditText.getText().toString();
        String password = passwordEditText.getText().toString();

        if (username.startsWith("@"))
            username = username.substring(1);

        steemitWebView.login(username, password, upvoteSwitch.isChecked(), followSwitch.isChecked());
        userNameEditText.setEnabled(false);
        passwordEditText.setEnabled(false);
        upvoteSwitch.setEnabled(false);
        followSwitch.setEnabled(false);
    }

    public void helpButtonClicked(View v){
        Intent aboutIntent = new Intent(LoginActivity.this,HelpActivity.class);
        startActivity(aboutIntent);
    }
}