Imports System
Imports System.Data
Imports System.IO
Imports System.Xml
Imports System.String
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports Microsoft.VisualBasic
Imports Telerik.QuickStart
Imports Telerik.Web.UI
Imports Quasar.Vigia.Ivc.Bll
Imports System.Text.RegularExpressions
Imports System.Diagnostics

Partial Class Quimica_ResultadoActEducacionSP
    Inherits System.Web.UI.Page

#Region "Declaración de Variables y Propiedades"

    Public oRutinas As New ClsRutinas
    Public oPropiedad As New EducacionSP

#End Region

#Region "Ciclo de Vida de la Página"

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then

            ' Lógica de edición por URL
            If Request.QueryString("opcion") = "Edit" AndAlso Request.QueryString("IdtblResultadosFC") IsNot Nothing Then
                Dim id As Integer
                If Integer.TryParse(Request.QueryString("IdtblResultadosFC"), id) Then
                    CargarDatos(id)
                End If
                btnInsertar.Visible = False
                btnActualizar.Visible = True
            Else
                btnInsertar.Visible = True
                btnActualizar.Visible = False
            End If
        Else
            ' ESTO SE EJECUTA CUANDO VIENE DEL POPUP (PostBack)
 
        End If
    End Sub

    Protected Sub Page_LoadComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadComplete
        If IsPostBack() Then
            Exit Sub
        End If

        If Session("IdUsuario") = 0 Then
            Response.Redirect("../Administrador/Seguridad/frmExpiroSession.aspx", True)
            Exit Sub
        End If
    End Sub

#End Region

#Region "Lógica de Inicialización y Modos (New/Edit/View)"
#End Region
#Region "Carga de Datos y Mapeo"

    Private Sub CargarDatos(id As Integer)
        Dim dr As DataRow = ObtenerDatosResultadoEducacionPorId(id)
        If dr Is Nothing Then Exit Sub
        hfIdRegistro.Value = id.ToString()
        Me.txtEstablecimiento.Text = dr("Establecimiento").ToString
        Me.txtPromedio.Text = dr("ResulProm").ToString
        ViewState("IdtblResultadosFC") = id
    End Sub

    ''' <summary></summary>
    ''' <param name="pIdRepEduc"></param>
    ''' <returns>DataRow</returns>
    ''' <remarks></remarks>
    Private Function ObtenerDatosResultadoEducacionPorId(ByVal pIdRepEduc As Integer) As DataRow
        Dim ObjParametros As New Collection
        Dim Parametro As New CmdParametro("@IdtblResultadosFC", pIdRepEduc, SqlDbType.Int, False)
        ObjParametros.Add(Parametro)
        Dim evento As Integer
        evento = 1204
        Dim dt As DataTable = clsBitacora.GetSelect("app.SpIVCSeleccionarDatosEducacionSPPorId", ObjParametros, HttpContext.Current.Session, evento, False).Tables(0)
        If dt.Rows.Count > 0 Then
            Return dt.Rows(0)
        Else
            Return Nothing
        End If
    End Function

#End Region
#Region "Carga de Listas Desplegables (Combos)"
#End Region
#Region "Eventos de Controles UI"
#End Region
#Region "Lógica del Grid (RadGrid)"
#End Region
#Region "Cálculos y Resúmenes Estadísticos"
#End Region
#Region "Funciones Auxiliares y Seguridad"
#End Region
#Region "Validaciones"

    Private Function ValidarFormulario() As Boolean

        Dim valor As String = txtEstablecimiento.Text.Trim()
        Dim patron As String = "^(NUEVO-[1-9]\d{0,5}|[0-9]{6})$"

        If Not System.Text.RegularExpressions.Regex.IsMatch(valor, patron) Then
            RadAjaxManager1.Alert("Formato inválido. Use: Nuevo-1 hasta Nuevo-999999 o número de 6 dígitos.")
            Return False
        End If

        Dim promedio As Decimal
        If Not Decimal.TryParse(txtPromedio.Text, promedio) Then
            RadAjaxManager1.Alert("Ingrese un valor numérico válido.")
            Return False
        End If
        If promedio <> Math.Round(promedio, 2) Then
            RadAjaxManager1.Alert("Solo se permiten máximo 2 decimales.")
            Return False
        End If

        Return True
    End Function

#End Region
#Region "Persistencia de Datos (CRUD)"

    Protected Sub btnInsertar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnInsertar.Click

        If Not ValidarFormulario() Then
            Exit Sub
        End If

        Dim dt As DataTable
        If Session("dt") IsNot Nothing Then
            dt = CType(Session("dt"), DataTable)
        Else
            Dim obj As New EducacionSP()
            dt = obj.Estructura()
        End If
        Dim row As DataRow = dt.NewRow()
        row("IdtblResultadosFC") = dt.Rows.Count + 1
        row("Establecimiento") = txtEstablecimiento.Text.ToUpper()
        row("ResulProm") = txtPromedio.Text.ToUpper()

        dt.Rows.Add(row)
        dt.AcceptChanges()
        Session("dt") = dt
        ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CloseAndRebind('navigateToInserted');", True)

    End Sub

    Protected Sub btnActualizar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnActualizar.Click

        'If Not ValidarFormulario() Then
        '    Exit Sub
        'End If

        Dim dt As DataTable = TryCast(Session("dt"), DataTable)
        If dt IsNot Nothing Then
            Dim idBusqueda As Integer
            If Not Integer.TryParse(hfIdRegistro.Value, idBusqueda) Then
                ' Aquí puedes mostrar mensaje o simplemente salir
                Exit Sub
            End If

            ' Buscamos la fila en el DataTable
            Dim row As DataRow = dt.AsEnumerable().FirstOrDefault(Function(r) r.Field(Of Integer)("IdtblResultadosFC") = idBusqueda)
            If row IsNot Nothing Then
                ' 4. Asignar los nuevos valores a la fila encontrada
                row("Establecimiento") = txtEstablecimiento.Text.ToUpper()
                row("ResulProm") = txtPromedio.Text.ToUpper()

                ' 5. Guardar cambios
                dt.AcceptChanges()
                Session("dt") = dt

                ' 6. Cerrar ventana o refrescar
                ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CloseAndRebind('navigateToUpdated');", True)
            End If
        End If
    End Sub

#End Region


End Class


