Imports System.IO
Imports System.Text
Imports IntraSell_DLL

Module ModuleMailGriton

    Public Function MailAnKundeMitDatei(mail As Email) As MailSenden
        Dim filekey = BerechneFileKey(mail.FilePath)
        mail.Mailtext = MailTextVorbereiten(filekey)
        Dim mailForm As New MailSenden
        mailForm.BereiteMailVor(mail)
        mailForm.Show()
        Return mailForm
    End Function

    ''' <summary>
    ''' Mailtext für Datei versenden
    ''' Filekey mit BerechneFileKey ausrechnen
    ''' </summary>
    ''' <param name="filekey"></param>
    ''' <returns></returns>
    Public Function MailTextVorbereiten(filekey As String) As String

        Dim Nachricht = ""
        Nachricht += "<html>"
        Nachricht += "Sehr geehrte Kundin, Sehr geehrter Kunde!"

        Nachricht += vbNewLine
        Nachricht += "<br>Anbei erhalten Sie die gewünschte Datei <b>" & filekey & "</b>  von Firma <b>" & VarValue_Default("Firma", "Ihre Firma") & "</b>"

        Dim linkDatei = "https://www.griton.net/mail/index.php?f=" & filekey
        Dim alinkDatei = "<a href='" & linkDatei & "'>" & linkDatei & "</a>"

        Nachricht += vbNewLine & "<br>Die Datei finden Sie unter: " & alinkDatei
        Nachricht += vbNewLine & "<hr/>"
        Nachricht += vbNewLine & "Link im Browser kopieren falls der Klick nicht funktioniert:" & linkDatei
        Nachricht += vbNewLine & "<hr/>"
        Nachricht += vbNewLine & "<br>Diese Email wurde mit Kassensystem IntraSell.net erstellt."
        Nachricht += vbNewLine & "<br>IntraSell.net - das Kassensystem ohne Gebühren - Informationen auf https://GRITON.NET oder 0676/6063036"
        Nachricht += "</html>"
        Return Nachricht
    End Function

    ''' <summary>
    ''' Filekey for FTP Uploads bzw. Emails
    ''' </summary>
    ''' <param name="filename">Absoluter oder relativer Path</param>
    ''' <returns></returns>
    Public Function BerechneFileKey(filename As String)
        Dim finfo As New FileInfo(filename)
        Dim fileKey = Convert.ToBase64String(Encoding.ASCII.GetBytes(finfo.Name)) & finfo.Extension
        Return fileKey.Replace("=", "")
    End Function

    Public Function DateiEinemKundenSenden(mail As Email) As String
        Dim filename = mail.FilePath
        Dim filekey = BerechneFileKey(filename)

        If DatenSenden(filename, filekey) Then
            'Mail Senden
            If EmailSenden(mail) Then
                Return "Nachricht wurde geschickt!"
            Else
                Return "Nachricht konnte nicht geschickt werden!"
            End If
        Else
            Return "Daten konnten upgeloaded werden!"
        End If
    End Function

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="filename"></param>
    ''' <param name="targetName"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function DatenSenden(filename As String, targetName As String)
        If IO.File.Exists(filename) Then
            My.Computer.Network.UploadFile(sourceFileName:=filename, address:="ftp://www.griton.net/mail/" & targetName, userName:="Rally", password:="Mashterka!", connectionTimeout:=5000, showUI:=True)
            Return True
        Else
            MsgBox("Datei " & filename & " wurde nicht gefunden!", vbCritical)
            Return False
        End If
    End Function

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="mail"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function EmailSenden(mail As Email)

        Dim nachricht = New ServiceSMS.KundenNotifizierung With {
            .SendSMS = False,
            .SendEmail = True,
            .EmailAdresseAbsender = mail.EmailFrom,
            .EmailAdresseEmpfaenger = mail.EmailTo,
            .EmailBetreff = mail.Subject,
            .Nachricht = mail.Mailtext
        }

        Return SendMailSync(nachricht)
    End Function

    Function SendMailSync(nachricht As ServiceSMS.KundenNotifizierung)
        Dim client = New ServiceSMS.ServiceSMSClient()
        client.Endpoint.Address = New ServiceModel.EndpointAddress("http://www.griton.net/ServiceSMS/ServiceSMS.svc")
        nachricht.DebugText = VarValue_Default("SMS_API_KEY", "Sie brauchen einen SMS Key. Anfrage: gt@griton.net") 'API sdfasdfasdqwerqwer2345234523regfsdfvsxcvwert234t523w4erfsdrfwerf##
        Dim result = client.Send(nachricht)
        Return result.SendEmailOK
    End Function

End Module
