Imports System.ComponentModel.DataAnnotations

Public Class CPersona
  Private m_fecha_nacimiento As String
  Private m_nombre As String
  Private m_apellidos As String
  Private m_telefono As String

  Public Sub New(Optional f As String = Nothing, Optional n As String = Nothing, Optional a As String = Nothing, Optional t As String = Nothing)
    m_fecha_nacimiento = f
    m_nombre = n
    m_apellidos = a
    m_telefono = t
  End Sub

  Public Property Fecha_nacimiento() As String
    Get
      Return m_fecha_nacimiento
    End Get
    Set(value As String)
      m_fecha_nacimiento = value
    End Set
  End Property

  <Display(Name:="Apellidos y nombre:", Description:=
    "Introduzca primero los apellidos y después el nombre.")> _
  <Required(ErrorMessage:="Se requiere el nombre")> _
  <RegularExpression("[a-zA-Zá-úÁ-ÚñÑüÜ\s]{1,32}", ErrorMessage:=
    "No se permiten ni números ni caracteres especiales")> _
  Public Property Nombre() As String
    Get
      Return m_nombre
    End Get
    Set(ByVal value As String)
      Validator.ValidateProperty(value,
        New ValidationContext(Me, Nothing, Nothing) _
        With {.MemberName = "Nombre"})
      m_nombre = value
    End Set
  End Property

  <Required(ErrorMessage:="Se requieren los apellidos")> _
  <RegularExpression("[a-zA-Zá-úÁ-ÚñÑüÜ\s]{1,32}", ErrorMessage:=
    "No se permiten ni números ni caracteres especiales")> _
  Public Property Apellidos() As String
    Get
      Return m_apellidos
    End Get
    Set(value As String)
      Validator.ValidateProperty(value,
      New ValidationContext(Me, Nothing, Nothing) _
      With {.MemberName = "Apellidos"})
      m_apellidos = value
    End Set
  End Property

  <Display(Name:="Número de teléfono:", Description:=
    "Un valor compuesto por dígitos, signo + y espacios")> _
  <RegularExpression("[+0-9\s]{9,12}", ErrorMessage:=
    "Debe haber entre 9 y 12 caracteres: dígitos, signo + y espacios")> _
  Public Property Telefono() As String
    Get
      Return m_telefono
    End Get
    Set(value As String)
      Validator.ValidateProperty(value,
        New ValidationContext(Me, Nothing, Nothing) _
        With {.MemberName = "Telefono"})
      m_telefono = value
    End Set
  End Property

  Public Overrides Function ToString() As String
    Return Nombre & " " & Apellidos
  End Function
End Class
