package com.brisco.meatwholesaler;

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

import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;

public class RegisterActivity extends AppCompatActivity {

    private TextInputLayout inputLayoutName;
    private TextInputLayout inputLayoutEmail;
    private TextInputLayout inputLayoutPassword;
    private TextInputLayout inputLayoutConfirmPassword;
    private TextInputEditText editTextName;
    private TextInputEditText editTextEmail;
    private TextInputEditText editTextPassword;
    private TextInputEditText editTextConfirmPassword;
    private Button buttonRegister;
    private ProgressBar progressBar;

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

        // Initialize views
        initializeViews();

        // Setup click listeners
        setupClickListeners();
    }

    private void initializeViews() {
        inputLayoutName = findViewById(R.id.input_layout_name);
        inputLayoutEmail = findViewById(R.id.input_layout_email);
        inputLayoutPassword = findViewById(R.id.input_layout_password);
        inputLayoutConfirmPassword = findViewById(R.id.input_layout_confirm_password);
        editTextName = findViewById(R.id.edit_text_name);
        editTextEmail = findViewById(R.id.edit_text_email);
        editTextPassword = findViewById(R.id.edit_text_password);
        editTextConfirmPassword = findViewById(R.id.edit_text_confirm_password);
        buttonRegister = findViewById(R.id.btn_register);
        progressBar = findViewById(R.id.progress_bar);
    }

    private void setupClickListeners() {
        buttonRegister.setOnClickListener(v -> attemptRegister());
    }

    private void attemptRegister() {
        // Reset errors
        inputLayoutName.setError(null);
        inputLayoutEmail.setError(null);
        inputLayoutPassword.setError(null);
        inputLayoutConfirmPassword.setError(null);

        // Get values
        String name = editTextName.getText().toString().trim();
        String email = editTextEmail.getText().toString().trim();
        String password = editTextPassword.getText().toString().trim();
        String confirmPassword = editTextConfirmPassword.getText().toString().trim();

        boolean cancel = false;
        View focusView = null;

        // Check for valid name
        if (name.isEmpty()) {
            inputLayoutName.setError("Name is required");
            focusView = editTextName;
            cancel = true;
        }

        // Check for valid email
        if (email.isEmpty()) {
            inputLayoutEmail.setError("Email is required");
            focusView = editTextEmail;
            cancel = true;
        } else if (!isEmailValid(email)) {
            inputLayoutEmail.setError("Invalid email address");
            focusView = editTextEmail;
            cancel = true;
        }

        // Check for valid password
        if (password.isEmpty()) {
            inputLayoutPassword.setError("Password is required");
            focusView = editTextPassword;
            cancel = true;
        } else if (!isPasswordValid(password)) {
            inputLayoutPassword.setError("Password must be at least 6 characters");
            focusView = editTextPassword;
            cancel = true;
        }

        // Check if passwords match
        if (!confirmPassword.equals(password)) {
            inputLayoutConfirmPassword.setError("Passwords do not match");
            focusView = editTextConfirmPassword;
            cancel = true;
        }

        if (cancel) {
            // There was an error; don't attempt register and focus the first form field with an error
            focusView.requestFocus();
        } else {
            // Show a progress spinner, and kick off a background task to perform the user registration attempt
            showProgress(true);
            
            // For demo purposes, we'll simulate a registration
            // In production, this would be an API call to register the user
            simulateRegistration(name, email, password);
        }
    }

    private boolean isEmailValid(String email) {
        return email.contains("@") && email.contains(".");
    }

    private boolean isPasswordValid(String password) {
        return password.length() >= 6;
    }

    private void showProgress(boolean show) {
        progressBar.setVisibility(show ? View.VISIBLE : View.GONE);
        buttonRegister.setEnabled(!show);
        editTextName.setEnabled(!show);
        editTextEmail.setEnabled(!show);
        editTextPassword.setEnabled(!show);
        editTextConfirmPassword.setEnabled(!show);
    }

    private void simulateRegistration(String name, String email, String password) {
        // Simulate network delay
        new android.os.Handler().postDelayed(() -> {
            showProgress(false);
            
            // For demo purposes, accept any valid registration
            // In production, this would validate against a backend API
            if (isEmailValid(email) && isPasswordValid(password)) {
                // Show success message
                Toast.makeText(RegisterActivity.this, "Registration successful! Please login.", Toast.LENGTH_LONG).show();

                // Redirect to login activity
                Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
                startActivity(intent);
                finish();
            } else {
                // Show error message
                Snackbar.make(findViewById(android.R.id.content), 
                        "Registration failed. Please try again.", 
                        Snackbar.LENGTH_LONG).show();
            }
        }, 1500); // Simulate 1.5 second delay
    }

    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }
}
