package com.example.tampopo_client.views;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.Observer;

import com.example.tampopo_client.R;
import com.example.tampopo_client.Tampopo;
import com.example.tampopo_client.viewmodels.UserViewModel;

public class AccountActivity extends AppCompatActivity {

    private UserViewModel userViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_account);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        // ViewModel初期化
        userViewModel = new ViewModelProvider(this).get(UserViewModel.class);

        //アカウント編集画面から設定画面への遷移
        ImageButton buttonReturn = (ImageButton)findViewById(R.id.buttonReturn);
        buttonReturn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(AccountActivity.this, SettingActivity.class);
                startActivity(intent);
            }
        });

        //もともとのメールアドレスを表示
        EditText mailbuttonInput = findViewById(R.id.mailbutton);
        mailbuttonInput.setText(((Tampopo) AccountActivity.this.getApplication()).getMailaddress());

        // 決定ボタン
        Button dicisionbutton = findViewById(R.id.dicisionbutton);
        dicisionbutton.setOnClickListener(v -> {

            Tampopo app = (Tampopo) getApplication();

            // 現在の（保存されている）パスワード
            String currentStoredPassword = app.getPassword() == null ? "" : app.getPassword();

            // 入力値を取得
            String beforePassword = ((EditText) findViewById(R.id.beforepasswordbutton)).getText().toString();
            String afterPassword1 = ((EditText) findViewById(R.id.afterpasswordbutton1)).getText().toString();
            String afterPassword2 = ((EditText) findViewById(R.id.afterpasswordbutton2)).getText().toString();
            String mailAddress = ((EditText) findViewById(R.id.mailbutton)).getText().toString();

            boolean passwordChanged = false;
            boolean emailChanged = false;

            // パスワード変更チェック
            if (!afterPassword1.isEmpty() || !afterPassword2.isEmpty() || !beforePassword.isEmpty()) {

                // 現在のパスワード確認
                if (!beforePassword.equals(currentStoredPassword)) {
                    Toast.makeText(this, "現在のパスワードが違います。", Toast.LENGTH_SHORT).show();
                    return;
                }

                // 新しいパスワード2回一致チェック
                if (!afterPassword1.equals(afterPassword2)) {
                    Toast.makeText(this, "新しいパスワードが一致しません。", Toast.LENGTH_SHORT).show();
                    return;
                }

                // 新旧同一チェック
                if (afterPassword1.equals(currentStoredPassword)) {
                    Toast.makeText(this, "新しいパスワードは現在のパスワードと同じです。", Toast.LENGTH_SHORT).show();
                    return;
                }

                // 更新実行
                app.setPassword(afterPassword2);
                userViewModel.updatePassword(app.getUserId(), afterPassword2, app.getToken());
                passwordChanged = true;
            }

            // メールアドレス変更チェック
            if (!mailAddress.equals(app.getMailaddress())) {
                app.setMailaddress(mailAddress);
                userViewModel.updateEmail(app.getUserId(), mailAddress, app.getToken());
                emailChanged = true;
            }

            // 結果表示
            if (!passwordChanged && !emailChanged) {
                Toast.makeText(this, "変更がありません。", Toast.LENGTH_SHORT).show();
                return;
            }

            Toast.makeText(this, "アカウント情報を更新しました。", Toast.LENGTH_SHORT).show();

            // 設定画面に戻る
            Intent intent = new Intent(AccountActivity.this, SettingActivity.class);
            startActivity(intent);
        });
    }
}
