<%@ Language=VBScript %>
<%
' ========================================================================
' Check All Warranties - Batch Process
' This page checks all PCs without warranty information against Dell API
' ========================================================================

On Error Resume Next
Response.Buffer = True
Response.ContentType = "application/json"
%>
<!--#include file="./includes/sql.asp"-->
<%
If Err.Number <> 0 Then
    Response.Write "{""success"": false, ""error"": ""Database include error: " & Replace(Err.Description, """", "'") & """}"
    Response.End
End If

' Configuration
Const VENDOR_API_URL = "http://10.48.130.113/vendor-api-proxy.php"
Const BATCH_SIZE = 10 ' Process 10 at a time

Dim strSQL
Dim serviceTags, serialNumber
Dim warrantyData, warrantyResults
Dim updated, errors, total
Dim response
Dim rsWarranties ' Create our own recordset object
' Note: objConn is declared in sql.asp include

' Initialize counters
updated = 0
errors = 0

' Find all PCs without warranty information
strSQL = "SELECT pcid, hostname, serialnumber " & _
         "FROM pc " & _
         "WHERE (warrantyenddate IS NULL OR warrantyenddate = '' OR warrantyenddate = '0000-00-00') " & _
         "AND serialnumber IS NOT NULL " & _
         "AND serialnumber <> 'N/A' " & _
         "AND serialnumber <> '' " & _
         "AND LENGTH(serialnumber) >= 5 " & _
         "AND isactive = 1"

' Create and open recordset with cursor to support MoveFirst
Set rsWarranties = Server.CreateObject("ADODB.Recordset")
If Err.Number <> 0 Then
    Response.Write "{""success"": false, ""error"": ""Failed to create recordset: " & Replace(Err.Description, """", "'") & """}"
    Response.End
End If

rsWarranties.CursorLocation = 3 ' adUseClient
rsWarranties.Open strSQL, objConn

If Err.Number <> 0 Then
    Response.Write "{""success"": false, ""error"": ""Failed to open recordset: " & Replace(Err.Description, """", "'") & """}"
    Response.End
End If

' Check if we have any records
If rsWarranties.EOF Then
    ' No devices need warranty checks
    Response.Write "{""success"": true, ""message"": ""No devices require warranty checks"", ""total"": 0, ""updated"": 0, ""errors"": 0}"
    rsWarranties.Close
    objConn.Close
    Response.End
End If

' Count total records
Dim serviceTagList()
Dim deviceInfo()
Dim count
count = 0

Do While Not rsWarranties.EOF
    count = count + 1
    rsWarranties.MoveNext
Loop
total = count

' Reset to beginning
rsWarranties.MoveFirst

' Build arrays
ReDim serviceTagList(total - 1)
ReDim deviceInfo(total - 1)
count = 0

Do While Not rsWarranties.EOF
    serialNumber = Trim(rsWarranties("serialnumber"))
    serviceTagList(count) = serialNumber
    Set deviceInfo(count) = CreateObject("Scripting.Dictionary")
    deviceInfo(count)("pcid") = rsWarranties("pcid")
    deviceInfo(count)("hostname") = rsWarranties("hostname")
    deviceInfo(count)("serialnumber") = serialNumber
    count = count + 1
    rsWarranties.MoveNext
Loop

rsWarranties.Close
Set rsWarranties = Nothing

' Process in batches
Dim i, batchStart, batchEnd, batchTags
Dim batchTagsStr, apiUrl, xmlhttp
Dim responseText, json

For i = 0 To total - 1 Step BATCH_SIZE
    batchStart = i
    batchEnd = i + BATCH_SIZE - 1
    If batchEnd >= total Then
        batchEnd = total - 1
    End If

    ' Build batch of service tags
    batchTagsStr = ""
    Dim j
    For j = batchStart To batchEnd
        If batchTagsStr <> "" Then
            batchTagsStr = batchTagsStr & ","
        End If
        batchTagsStr = batchTagsStr & serviceTagList(j)
    Next

    ' Call vendor API
    apiUrl = VENDOR_API_URL & "?vendor=dell&action=warranty-batch&servicetags=" & Server.URLEncode(batchTagsStr)

    Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
    xmlhttp.setTimeouts 30000, 30000, 30000, 30000 ' 30 second timeout

    On Error Resume Next
    xmlhttp.Open "GET", apiUrl, False
    xmlhttp.setRequestHeader "Accept", "application/json"
    xmlhttp.Send

    If Err.Number <> 0 Then
        errors = errors + (batchEnd - batchStart + 1)
        Err.Clear
    Else
        responseText = xmlhttp.responseText

        ' Parse JSON response (simplified - for production use proper JSON parser)
        ' For now, we'll extract warranty data using string parsing
        If InStr(responseText, """success"":true") > 0 Then
            ' Process each warranty in batch
            For j = batchStart To batchEnd
                serialNumber = serviceTagList(j)

                ' Extract warranty data for this serial (simplified extraction)
                Dim warrantyEndDate, serviceLevel, warrantyStatus
                warrantyEndDate = ExtractWarrantyData(responseText, serialNumber, "warrantyEndDate")
                serviceLevel = ExtractWarrantyData(responseText, serialNumber, "serviceLevel")
                warrantyStatus = ExtractWarrantyData(responseText, serialNumber, "warrantyStatus")

                If warrantyEndDate <> "" Then
                    ' Update database
                    strSQL = "UPDATE pc SET " & _
                             "warrantyenddate = '" & Replace(warrantyEndDate, "'", "''") & "', " & _
                             "warrantystatus = '" & Replace(warrantyStatus, "'", "''") & "', " & _
                             "warrantylevel = '" & Replace(Left(serviceLevel, 100), "'", "''") & "' " & _
                             "WHERE pcid = " & deviceInfo(j)("pcid")

                    On Error Resume Next
                    objConn.Execute strSQL

                    If Err.Number = 0 Then
                        updated = updated + 1
                    Else
                        errors = errors + 1
                        Err.Clear
                    End If
                    On Error Goto 0
                Else
                    errors = errors + 1
                End If
            Next
        Else
            errors = errors + (batchEnd - batchStart + 1)
        End If
    End If
    On Error Goto 0

    Set xmlhttp = Nothing

    ' Small delay between batches - ASP doesn't support WScript.Sleep
    ' Instead, we'll just continue without delay since batches are small
    ' If batchEnd < total - 1 Then
    '     ' No sleep available in ASP
    ' End If
Next

' Return response
Response.Write "{""success"": true, ""total"": " & total & ", ""updated"": " & updated & ", ""errors"": " & errors & ", ""message"": ""Updated " & updated & " of " & total & " warranty records""}"

objConn.Close

' Helper function to extract warranty data from JSON
Function ExtractWarrantyData(jsonText, serviceTag, fieldName)
    Dim pattern, startPos, endPos, value
    pattern = """serviceTag"":""" & serviceTag & """"
    startPos = InStr(jsonText, pattern)

    If startPos > 0 Then
        ' Find the field within this warranty object
        Dim fieldPattern
        fieldPattern = """" & fieldName & """:"""
        startPos = InStr(startPos, jsonText, fieldPattern)

        If startPos > 0 Then
            startPos = startPos + Len(fieldPattern)
            endPos = InStr(startPos, jsonText, """")
            If endPos > startPos Then
                value = Mid(jsonText, startPos, endPos - startPos)
                ExtractWarrantyData = value
                Exit Function
            End If
        End If
    End If

    ExtractWarrantyData = ""
End Function
%>
