<html>
<head>
<link rel="stylesheet" href="./style.css" type="text/css">
<!--#include file="./includes/sql.asp"-->
<!--#include file="./includes/validation.asp"-->
<!--#include file="./includes/encoding.asp"-->
<!--#include file="./includes/error_handler.asp"-->
<!--#include file="./includes/db_helpers.asp"-->
</head>

<body>
<div class="page">
<%
	' Initialize error handling
	Call InitializeErrorHandling("saveprinter.asp")

	' Get and validate all inputs
	Dim modelid, serialnumber, ipaddress, fqdn, printercsfname, printerwindowsname, machineid
	modelid = Trim(Request.Form("modelid"))
	serialnumber = Trim(Request.Form("serialnumber"))
	ipaddress = Trim(Request.Form("ipaddress"))
	fqdn = Trim(Request.Form("fqdn"))
	printercsfname = Trim(Request.Form("printercsfname"))
	printerwindowsname = Trim(Request.Form("printerwindowsname"))
	machineid = Trim(Request.Form("machineid"))

	' Validate required fields
	If Not ValidateID(modelid) Then
		Call HandleValidationError("addprinter.asp", "INVALID_ID")
	End If

	If Not ValidateID(machineid) Then
		Call HandleValidationError("addprinter.asp", "INVALID_ID")
	End If

	If serialnumber = "" Then
		Call HandleValidationError("addprinter.asp", "INVALID_INPUT")
	End If

	If ipaddress = "" Then
		Call HandleValidationError("addprinter.asp", "INVALID_INPUT")
	End If

	If printerwindowsname = "" Then
		Call HandleValidationError("addprinter.asp", "INVALID_INPUT")
	End If

	' Validate IP address format
	If Not ValidateIPAddress(ipaddress) Then
		Call HandleValidationError("addprinter.asp", "INVALID_IP")
	End If

	' Validate serial number format
	If Not ValidateSerialNumber(serialnumber) Then
		Call HandleValidationError("addprinter.asp", "INVALID_SERIAL")
	End If

	' Validate field lengths
	If Len(serialnumber) > 100 Then
		Call HandleValidationError("addprinter.asp", "INVALID_INPUT")
	End If

	If Len(fqdn) > 255 Then
		Call HandleValidationError("addprinter.asp", "INVALID_INPUT")
	End If

	If Len(printercsfname) > 50 Then
		Call HandleValidationError("addprinter.asp", "INVALID_INPUT")
	End If

	If Len(printerwindowsname) > 255 Then
		Call HandleValidationError("addprinter.asp", "INVALID_INPUT")
	End If

	' Check if printer with same IP already exists
	Dim checkSQL, rsCheck
	checkSQL = "SELECT COUNT(*) as cnt FROM printers WHERE ipaddress = ? AND isactive = 1"
	Set rsCheck = ExecuteParameterizedQuery(objConn, checkSQL, Array(ipaddress))
	If Not rsCheck.EOF Then
		If Not IsNull(rsCheck("cnt")) Then
			If CLng(rsCheck("cnt")) > 0 Then
				rsCheck.Close
				Set rsCheck = Nothing
				Response.Write("<div class='alert alert-danger'>Error: A printer with IP address '" & Server.HTMLEncode(ipaddress) & "' already exists.</div>")
				Response.Write("<a href='addprinter.asp'>Go back</a>")
				Call CleanupResources()
				Response.End
			End If
		End If
	End If
	rsCheck.Close
	Set rsCheck = Nothing

	' Execute parameterized INSERT query
	strSQL = "INSERT INTO printers (modelid, serialnumber, ipaddress, fqdn, printercsfname, printerwindowsname, machineid, isactive) " &_
			"VALUES (?, ?, ?, ?, ?, ?, ?, ?)"

	Dim recordsAffected
	recordsAffected = ExecuteParameterizedInsert(objConn, strSQL, Array(modelid, serialnumber, ipaddress, fqdn, printercsfname, printerwindowsname, machineid, 1))

	' Get the new printer ID
	Dim newPrinterId
	Set rsCheck = objConn.Execute("SELECT LAST_INSERT_ID() as newid")
	newPrinterId = 0
	If Not rsCheck.EOF Then
		If Not IsNull(rsCheck("newid")) Then
			newPrinterId = CLng(rsCheck("newid"))
		End If
	End If
	rsCheck.Close
	Set rsCheck = Nothing

	' Cleanup resources
	Call CleanupResources()

	' Redirect to display page
	If recordsAffected > 0 And newPrinterId > 0 Then
%>
<meta http-equiv="refresh" content="0; url=./displayprinter.asp?printerid=<%=Server.HTMLEncode(newPrinterId)%>">
<%
	Else
		Response.Write("Error: Printer was not added successfully.")
	End If
%>
</div>
</body>
</html>
