Imports System.IO
Imports System.Text.RegularExpressions
Imports System.Threading
Imports IntraSell_DLL
Imports IntraSell_Net_Base

Module ModuleSMS

    Public Function WurdeGesendet(kundenNotifizierung As ServiceSMS.KundenNotifizierung) As Boolean
        If kundenNotifizierung Is Nothing Then Return False
        Return kundenNotifizierung.SendEmailOK Or kundenNotifizierung.SendSMSOK
    End Function

    Public Function SendeNachricht(nachricht As ServiceSMS.KundenNotifizierung, debugMsg As String) As Boolean
        Try
            Dim response = SendSync(nachricht)
            debugMsg = nachricht.DebugText

            Return WurdeGesendet(response)
        Catch ex As Exception
            WriteLog("Fehler in SendeNachricht " + ex.Message)
            Return False
        End Try
    End Function

    Sub SendAsync(nachricht As ServiceSMS.KundenNotifizierung)
        If nachricht.SendSMS Then
            WriteLog("SendAsync SMS " & nachricht.MobileNummerEmpfaenger)
        End If
        If nachricht.SendEmail Then
            WriteLog("SendAsync Email from " & nachricht.EmailAdresseAbsender & " an " & nachricht.EmailAdresseEmpfaenger)
        End If

        Dim trd As New Thread(AddressOf SendSync) With {
            .Name = "ModuleSMS.SendAsync",
            .IsBackground = True
        }
        trd.Start(nachricht)
    End Sub

    Function SendSync(nachricht As ServiceSMS.KundenNotifizierung) As ServiceSMS.KundenNotifizierung
        Try
            If nachricht Is Nothing Then
                Return Nothing
            End If
            Dim client = New ServiceSMS.ServiceSMSClient()
            nachricht.Mandant = VarValue(Variablen.FIRMA)
            nachricht.DebugText = VarValue_Default(Variablen.SMS_API_KEY, Messages.ModuleSMS_SMS_Key_Anfrage) 'API sdfasdfasdqwerqwer2345234523regfsdfvsxcvwert234t523w4erfsdrfwerf##
            nachricht.Key = VarValue_Default(Variablen.SMS_API_KEY, Messages.ModuleSMS_SMS_Key_Anfrage)
            Dim response = client.Send(nachricht)

            If nachricht.SendSMS Then
                WriteLog("SendSync SendSMSOK " & response.SendSMSOK)
            End If

            If nachricht.SendEmail Then
                WriteLog("SendSync SendEmailOK " & response.SendEmailOK)
            End If
            Return response
        Catch ex As Exception
            HandleAppError(ex, Silent:=True)
        End Try
        Return Nothing
    End Function

    Public Function IsTelefonNumber(phoneNumber As String) As Boolean
        If phoneNumber Is Nothing Then
            Return False
        End If
        Dim result As String = ""
        Dim chars As Char() = phoneNumber.ToCharArray()
        For count = 0 To chars.GetLength(0) - 1
            Dim tempChar As Char = chars(count)
            If Char.IsDigit(tempChar) OrElse "()+-., ".Contains(tempChar.ToString()) Then
                result += StripNonAlphaNumeric(tempChar)
            Else
                Return False
            End If
        Next
        Return result.Length > 6 '
        'Return result.Length = 10 'Length of US phone numbers is 10
    End Function

    Private Function StripNonAlphaNumeric(value As String) As String
        Dim regex = New Regex("[^0-9a-zA-Z]", RegexOptions.None)
        Dim result As String
        If regex.IsMatch(value) Then
            result = regex.Replace(value, "")
        Else
            result = value
        End If
        Return result
    End Function

#Region "Nachrichten"

    Public Function ErstelleSMSEmailNachricht(Vorgang As VorgangInBearbeitung,
                                              Optional ZusatztextText As String = Nothing,
                                              Optional VorlageName As String = VORLAGE_VORGANG_SMS) As ServiceSMS.KundenNotifizierung
        If Vorgang Is Nothing Then
            Return Nothing
        End If
        Dim nachricht = New ServiceSMS.KundenNotifizierung With {
                    .Mandant = VarValue(Variablen.FIRMA),
                    .Key = VarValue_Default("SMS_API_KEY", "Anfrage: gt@griton.net"),
                    .DebugText = VarValue_Default("SMS_API_KEY", "Anfrage: gt@griton.net"), 'API sdfasdfasdqwerqwer2345234523regfsdfvsxcvwert234t523w4erfsdrfwerf##
                    .EmailAdresseAbsender = VarValue_Default(Variablen.FIRMA_EMAIL, "office@griton.net"),
                    .EmailAdresseEmpfaenger = IntraSellKunden.GetKundenDaten(Vorgang.KundNr, "Email"),
                    .MobileNummerEmpfaenger = IntraSellKunden.GetKundenDaten(Vorgang.KundNr, "Mobil"),
                    .MobileNummerAbsender = VarValue_Default(Variablen.FIRMA_WHATSAPP_NUMMER, "436XXXXXXXXX")
                }
        If nachricht.MobileNummerEmpfaenger = "" Then
            nachricht.MobileNummerEmpfaenger = IntraSellKunden.GetKundenDaten(Vorgang.KundNr, "Tel")
        End If

        nachricht.SendEmail = nachricht.EmailAdresseEmpfaenger.Contains("@") AndAlso nachricht.EmailAdresseEmpfaenger <> "@email"
        nachricht.SendSMS = nachricht.MobileNummerEmpfaenger.Length > 6

        Dim NachrichtText = GeneriereNachrichtText(Vorgang, VorlageName)
        If NachrichtText IsNot Nothing Then
            If Not String.IsNullOrEmpty(ZusatztextText) Then
                nachricht.Nachricht += ZusatztextText & vbNewLine
            End If

            nachricht.Nachricht += NachrichtText

            If nachricht.SendEmail Then
                nachricht.EmailBetreff = NachrichtText.Split(vbNewLine)(0) 'Erste Zeile 
            End If
        End If
        Return nachricht
    End Function

    Public Function GeneriereNachrichtText(ByRef vorgang As VorgangInBearbeitung, vorlageName As String) As String
        Dim NachrichtText = GetBestellungText(vorgang, vorlageName)
        If NachrichtText IsNot Nothing Then
            NachrichtText = NachrichtText.Replace("[STATUS]", vorgang.Status)

            If NachrichtText.Contains("[GUTSCHEIN_CODE]") Then
                Dim GUTSCHEIN_CODE As String = Convert.ToBase64String(BitConverter.GetBytes(vorgang.Nummer))
                NachrichtText = NachrichtText.Replace("[GUTSCHEIN_CODE]", GUTSCHEIN_CODE)
            End If

            If NachrichtText.Contains("[BESTELLUNG]") Then
                NachrichtText = NachrichtText.Replace("[BESTELLUNG]", GetBestellungText(vorgang, VORLAGE_RECHNUNG))
            End If
            ErsetzeGutscheinPlatzhalter(NachrichtText)
        End If
        Return NachrichtText
    End Function

    Public Sub ErsetzeGutscheinPlatzhalter(ByRef NachrichtText As String)
        NachrichtText = NachrichtText.Replace("[JETZT]", Now)
        NachrichtText = NachrichtText.Replace("[Firma]", VarValue_Default("Firma", "Ihre Firma"))
        NachrichtText = NachrichtText.Replace("[Firma_Name]", VarValue_Default("Firma_Name", "Ihre Firma"))
        NachrichtText = NachrichtText.Replace("[DOMAIN]", VarValue_Default("DOMAIN", "http://shop.griton.net"))
        NachrichtText = NachrichtText.Replace("[WEBORDER_GUTSCHEIN_PROZENT]", VarValue_Default("WEBORDER_GUTSCHEIN_PROZENT", "3"))
        NachrichtText = NachrichtText.Replace("[WEBORDER_GUTSCHEIN_CODE]", VarValue_Default("WEBORDER_GUTSCHEIN_CODE", "WEBORDER"))
        NachrichtText = NachrichtText.Replace("[WEBORDER_MANDANT]", VarValue_Default("WEBORDER_MANDANT", VarValue_Default("Firma", "Ihre Firma")))
    End Sub


    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="Vorgang"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function GetBestellungText(Vorgang As VorgangInBearbeitung, vorlage As String) As String
        Dim filename As String = OpenAusdruck_InWord_Filename_RTF(Vorgang.Typ, Vorgang.Nummer, vorlage, Silent:=True)
        If IO.File.Exists(filename) Then
            Return File.ReadAllText(filename)
        End If
        Return Nothing
    End Function

#End Region

End Module
