Imports System.IO
Public Class myTreatment
    Private Sub mytreatment_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        StartPosition = FormStartPosition.CenterScreen
        fillGrid(dgv_treatment, fileLoc_treatment)

        txt_treatmentID.BackColor = gray
        txt_productID.BackColor = gray
        txt_treatmentName.BackColor = gray
        txt_price.BackColor = gray
        txt_product.BackColor = gray
        txt_time.BackColor = gray
        txt_treatmentDesc.BackColor = gray
    End Sub

    Private Sub fillText(ByVal rowIndex As Integer)

        txt_treatmentID.Text = dgv_treatment.Rows(rowIndex).Cells(0).Value
        txt_productID.Text = dgv_treatment.Rows(rowIndex).Cells(1).Value
        txt_treatmentName.Text = dgv_treatment.Rows(rowIndex).Cells(2).Value
        txt_price.Text = dgv_treatment.Rows(rowIndex).Cells(3).Value
        txt_product.Text = FindField(fileLoc_Product, txt_productID.Text, 2)
        txt_time.Text = dgv_treatment.Rows(rowIndex).Cells(4).Value
        txt_treatmentDesc.Text = dgv_treatment.Rows(rowIndex).Cells(5).Value
    End Sub

    Private Sub clearText()
        txt_treatmentID.Text = ""
        txt_productID.Text = ""
        txt_treatmentName.Text = ""
        txt_price.Text = ""
        txt_product.Text = ""
        txt_time.Text = ""
        txt_treatmentDesc.Text = ""
    End Sub

    'Navigation
    Private dgvNavigator As New DataGridViewNavigator()
    Private Sub btn_first_Click(sender As Object, e As EventArgs) Handles btn_first.Click
        dgvNavigator.SelectFirst(dgv_treatment)
        fillText(dgvNavigator.CurrentIndex)
    End Sub

    Private Sub btn_previous_Click(sender As Object, e As EventArgs) Handles btn_previous.Click
        dgvNavigator.SelectPrevious(dgv_treatment)
        fillText(dgvNavigator.CurrentIndex)
    End Sub

    Private Sub btn_next_Click(sender As Object, e As EventArgs) Handles btn_next.Click
        dgvNavigator.SelectNext(dgv_treatment)
        fillText(dgvNavigator.CurrentIndex)
    End Sub

    Private Sub btn_last_Click(sender As Object, e As EventArgs) Handles btn_last.Click
        dgvNavigator.SelectLast(dgv_treatment)
        fillText(dgvNavigator.CurrentIndex)
    End Sub
    '----------------------------------------------------------------------------------------------'
    Private Sub btn_add_Click(sender As Object, e As EventArgs) Handles btn_add.Click
        clearText()
        Dim newID As Integer = AddRecord(fileLoc_treatment)
        txt_treatmentID.Text = newID
    End Sub

    Private Sub btn_save_Click(sender As Object, e As EventArgs) Handles btn_save.Click
        If Check() = False Then
            Return
        End If


        Dim treatmentID As Integer = txt_treatmentID.Text


        If UniqueCheck(treatmentID, fileLoc_treatment) Then
            Dim newValus As String = (txt_treatmentID.Text + "," + txt_productID.Text + "," + txt_treatmentName.Text + "," + txt_price.Text + "," + txt_time.Text + "," + txt_treatmentDesc.Text)
            SaveRecord(fileLoc_treatment, newValus)
            fillGrid(dgv_treatment, fileLoc_treatment)
        Else
            MsgBox("ID is not unique.")
        End If
        'check presence of supplier ID in Supplier ID file
    End Sub

    Private Function Check()

        ' Presence check for the treatment ID
        If txt_treatmentID.Text = "" Then
            MsgBox("Please enter a treatment ID")
            Return False
        End If

        ' Integer check on the treatment ID
        If Not IntCheck(txt_treatmentID.Text) Then
            MsgBox("Please enter a valid treatment ID")
            Return False
        End If

        ' Integer check on the product ID
        If Not IntCheck(txt_productID.Text) Then
            MsgBox("Please enter a valid Product ID")
            Return False
        End If

        ' Verifying the product ID
        Dim productID As Integer = txt_productID.Text
        If BinSearch(productID, fileLoc_Product, 0) = False Then
            MsgBox("invalid Product ID")
            Return False
        End If

        ' Length (and presence) check on the treatment name
        If txt_treatmentName.Text.Length < 2 Or txt_treatmentName.Text.Length > 20 Then
            MsgBox("treatment name invalid, must be between 3 and 19 characters")
            Return False
        End If

        ' Integer check on the price to avoid crash when converting
        IntCheck(txt_price.Text)
        Dim Price As Integer = txt_price.Text
        If Price < 0 Or Price > 200 Then
            MsgBox("Invalid Price, must be between 0 and 200 (pounds)")
            Return False
        End If

        ' Integer time on the price to avoid crash when converting
        IntCheck(txt_time.Text)
        Dim Time As Integer = txt_time.Text
        If Time < 0 Or Time > 200 Then
            MsgBox("Service time invalid, must be between 0 and 200 (minutes)")
            Return False
        End If

        ' Length (and presence) check on the treatment description
        If txt_treatmentDesc.Text.Length < 10 Or txt_treatmentDesc.Text.Length > 200 Then
            MsgBox("Invalid service description, must be between 0 and 200 characters")
            Return False
        End If

        Return True

    End Function

    Private Sub btn_edit_Click(sender As Object, e As EventArgs) Handles btn_edit.Click
        ' Checks data to ensure validity
        If Check() = False Then
            Return
        End If
        Dim ID As Integer = txt_treatmentID.Text
        Dim newValues As String = (txt_treatmentID.Text + "," + txt_productID.Text + "," + txt_treatmentName.Text + "," + txt_price.Text + "," + txt_time.Text + "," + txt_treatmentDesc.Text)
        EditRecord(ID, newValues, fileLoc_treatment)
        fillGrid(dgv_treatment, fileLoc_treatment)

    End Sub

    Private Sub btn_delete_Click(sender As Object, e As EventArgs) Handles btn_delete.Click

        If txt_treatmentID.Text = "" Then
            MsgBox("Please enter a treatment ID")
            Return
        End If

        Dim treatmentID As Integer = txt_treatmentID.Text
        DeleteRecord(dgv_treatment, fileLoc_treatment, treatmentID)
        fillGrid(dgv_treatment, fileLoc_treatment)

    End Sub

    Private Sub btn_menu_Click(sender As Object, e As EventArgs) Handles btn_menu.Click
        Me.Visible = False
        myMenu.Visible = True
    End Sub

    Private Sub txt_productID_TextChanged(sender As Object, e As EventArgs) Handles txt_productID.TextChanged
        txt_product.Text = FindField(fileLoc_Product, txt_productID.Text, 2)
    End Sub

    ' Sorts

    ' Treatment ID Ascending/Descending
    ' Product ID Ascending/Descending
    ' Price Ascending/Descending
    ' Time Ascending/Descending
    Private Sub btn_TreIdAsc_Click(sender As Object, e As EventArgs) Handles btn_TreIdAsc.Click
        AscSort(fileLoc_treatment, 0)
        fillGrid(dgv_treatment, fileLoc_treatment)
    End Sub

    Private Sub btn_TreIdDesc_Click(sender As Object, e As EventArgs) Handles btn_TreIdDesc.Click
        DescSort(fileLoc_treatment, 0)
        fillGrid(dgv_treatment, fileLoc_treatment)
    End Sub

    Private Sub btn_prodAsc_Click(sender As Object, e As EventArgs) Handles btn_prodAsc.Click
        AscSort(fileLoc_treatment, 1)
        fillGrid(dgv_treatment, fileLoc_treatment)
    End Sub

    Private Sub btn_prodDesc_Click(sender As Object, e As EventArgs) Handles btn_prodDesc.Click
        DescSort(fileLoc_treatment, 1)
        fillGrid(dgv_treatment, fileLoc_treatment)
    End Sub

    Private Sub btn_priAsc_Click(sender As Object, e As EventArgs) Handles btn_priAsc.Click
        AscSort(fileLoc_treatment, 3)
        fillGrid(dgv_treatment, fileLoc_treatment)
    End Sub

    Private Sub btn_priDesc_Click(sender As Object, e As EventArgs) Handles btn_priDesc.Click
        DescSort(fileLoc_treatment, 3)
        fillGrid(dgv_treatment, fileLoc_treatment)
    End Sub

    Private Sub btn_timeAsc_Click(sender As Object, e As EventArgs) Handles btn_timeAsc.Click
        AscSort(fileLoc_treatment, 4)
        fillGrid(dgv_treatment, fileLoc_treatment)
    End Sub

    Private Sub btn_timeDesc_Click(sender As Object, e As EventArgs) Handles btn_timeDesc.Click
        DescSort(fileLoc_treatment, 4)
        fillGrid(dgv_treatment, fileLoc_treatment)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Visible = False
        myService.Visible = True
    End Sub
End Class