package com.fluxup.app;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class RegisterActivity extends AppCompatActivity {

    private EditText etUsername, etEmail, etPhone, etPassword, etConfirmPassword;
    private Button btnRegister;
    private TextView tvBackToLogin;
    private android.widget.ProgressBar pbRegister;

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


        etUsername = findViewById(R.id.etRegUsername);
        etEmail = findViewById(R.id.etRegEmail);
        etPhone = findViewById(R.id.etRegPhone);
        etPassword = findViewById(R.id.etRegPassword);
        etConfirmPassword = findViewById(R.id.etRegConfirmPassword);
        btnRegister = findViewById(R.id.btnRegister);
        tvBackToLogin = findViewById(R.id.tvBackToLogin);
        pbRegister = findViewById(R.id.pbRegister);

        btnRegister.setOnClickListener(v -> {
            String username = etUsername.getText().toString();
            String email = etEmail.getText().toString();
            String phone = etPhone.getText().toString();
            String pass = etPassword.getText().toString();
            String confirmPass = etConfirmPassword.getText().toString();

            if (username.isEmpty()) {
                etUsername.setError("Nome de utilizador é obrigatório");
                etUsername.requestFocus();
                return;
            }

            if (email.isEmpty()) {
                etEmail.setError("Email é obrigatório");
                etEmail.requestFocus();
                return;
            }

            if (phone.isEmpty()) {
                etPhone.setError("Número de telemóvel é obrigatório");
                etPhone.requestFocus();
                return;
            }

            if (pass.isEmpty()) {
                etPassword.setError("Palavra-passe é obrigatória");
                etPassword.requestFocus();
                return;
            }

            if (!pass.equals(confirmPass)) {
                etConfirmPassword.setError("As palavras-passe não coincidem");
                etConfirmPassword.requestFocus();
                return;
            }

            if (!username.matches("[a-zA-ZáàâãéèêíïóôõöúçÁÀÂÃÉÈÊÍÏÓÔÕÖÚÇ ]+")) {
                etUsername.setError("O nome de utilizador deve conter apenas letras");
                etUsername.requestFocus();
                return;
            }

            if (!email.contains("@")) {
                etEmail.setError("O email deve conter um '@'");
                etEmail.requestFocus();
                return;
            }

            if (phone.length() < 9) {
                etPhone.setError("O número de telefone deve ter no mínimo 9 dígitos");
                etPhone.requestFocus();
                return;
            }

            if (pass.length() < 8) {
                etPassword.setError("A palavra-passe deve ter no mínimo 8 caracteres");
                etPassword.requestFocus();
                return;
            }

            // Mostrar progresso e desativar botão
            pbRegister.setVisibility(View.VISIBLE);
            btnRegister.setEnabled(false);

            Usuario novoUsuario = new Usuario(null, username, email, pass, phone);
            
            UsuariosService.registar(RegisterActivity.this, novoUsuario, new UsuariosService.ServiceCallback<Usuario>() {
                @Override
                public void onSuccess(Usuario data) {
                    pbRegister.setVisibility(View.GONE);
                    Toast.makeText(RegisterActivity.this, "Conta criada com sucesso!", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                }

                @Override
                public void onError(String error) {
                    pbRegister.setVisibility(View.GONE);
                    btnRegister.setEnabled(true);
                    Toast.makeText(RegisterActivity.this, "Erro: " + error, Toast.LENGTH_LONG).show();
                }
            });
        });

        tvBackToLogin.setOnClickListener(v -> finish());
    }
}
