// Importa la clase compartida para validación y cálculo automático de áreas.
using Areas.Compartido;

// Define el espacio de nombres del proyecto.
namespace Areas;

// Clase parcial que representa la ventana para calcular el área de un rectángulo.
// Hereda de Form para ser una ventana de Windows.
public partial class Rectangulo : Form
{
  // Constructor de la ventana.
  public Rectangulo()
  {
    // Inicializa los componentes visuales definidos en el diseñador.
    this.InitializeComponent();
  }

  // Evento que se ejecuta al hacer clic en el botón "Regresar".
  // Parámetros:
  //   - sender: El botón que se presionó.
  //   - e: Información del evento (no se usa en este caso).
  private void RegresarButton_Click(object sender, EventArgs e)
  {
    // Cierra esta ventana y regresa a la ventana principal.
    this.Close();
  }

  // Evento que se ejecuta al hacer clic en el botón "Limpiar".
  // Parámetros:
  //   - sender: El botón que se presionó.
  //   - e: Información del evento (no se usa en este caso).
  private void LimpiarButton_Click(object sender, EventArgs e)
  {
    // Borra el contenido de la caja de texto de la base.
    this.baseTextBox.Clear();
    // Borra el contenido de la caja de texto de la altura.
    this.alturaTextBox.Clear();
    // Limpia el resultado mostrado.
    this.resultadoLabel.Text = "Área: ";
    // Coloca el cursor en la caja de texto de la base.
    this.baseTextBox.Focus();
  }

  // Evento que se ejecuta cuando el usuario escribe en las cajas de texto.
  // Parámetros:
  //   - sender: La caja de texto donde se escribió. Puede ser null.
  //   - e: Información del evento (no se usa en este caso).
  private void CajasDeTexto_TextChanged(object? sender, EventArgs e)
  {
    // Usa el método compartido para calcular el área automáticamente.
    // Le pasamos: las cajas de texto, donde mostrar el resultado, y la fórmula.
    CajasDeTextoAutoCalcular.CajaTexto_CambioTexto(new[] { this.baseTextBox, this.alturaTextBox }, this.resultadoLabel, valores =>
    {
      // Obtiene el valor de la base.
      double baseRectangulo = valores[0];
      // Obtiene el valor de la altura.
      double altura = valores[1];
      // Calcula y devuelve el área del rectángulo: base × altura
      return baseRectangulo * altura;
    });
  }

  // Evento que se ejecuta cuando el usuario presiona una tecla.
  // Parámetros:
  //   - sender: La caja de texto donde se presionó la tecla. Puede ser null.
  //   - e: Información de la tecla:
  //        - e.KeyChar: La tecla presionada.
  //        - e.Handled: Si es true, la tecla se ignora.
  private void ValidarEntrada_KeyPress(object? sender, KeyPressEventArgs e)
  {
    // Usa el método compartido para permitir solo números y punto decimal.
    CajasDeTextoAutoCalcular.ValidarEntradaNumerica(sender, e);
  }
}
