#include <File.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>

Global $in_deps_file, $out_deps_file
Global $in_deps_array, $out_deps_array, $in_array

; MVN File auswählen
Local $in_deps_file = FileOpenDialog("Datei öffnen", @ScriptDir & "\", "Text Files (*.txt)", BitOR($FD_FILEMUSTEXIST, $FD_PATHMUSTEXIST))
;Fehlerbehandlung FileOpen
If @error Then
   ; Display the error message.
   MsgBox($MB_SYSTEMMODAL, "", "Keine Datei ausgewählt.")

   ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder.
   FileChangeDir(@ScriptDir)
Else
   ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder.
   FileChangeDir(@ScriptDir)

   ; Replace instances of "|" with @CRLF in the string returned by FileOpenDialog.
   $in_deps_file = StringReplace($in_deps_file, "|", @CRLF)
EndIf

; Deps in Array packen
_FileReadToArray($in_deps_file, $in_array)

; Einzigartigkeiten aus Array suchen
Local $in_deps_array = _ArrayUnique($in_array, $ARRAYUNIQUE_NOCOUNT)

; Array nach unwichtigen Einträgen durchgehen und entfernen
For $element=1 To $in_deps_array[0] - 1

   if StringLeft($in_deps_array[$element],9) = "[WARNING]" Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -= 1
   EndIf
   if StringLeft($in_deps_array[$element],16) = "[INFO] The follo" Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -= 1
   EndIf
   if StringLeft($in_deps_array[$element],10) = "[INFO] ---" Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -= 1
   EndIf
   if StringLeft($in_deps_array[$element],11) = "[INFO] Scan" Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -= 1
   EndIf
   if StringLeft($in_deps_array[$element],11) = "[INFO] Reac" Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -= 1
   EndIf
   if StringLeft($in_deps_array[$element],15) = "[INFO]         " Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -= 1
   EndIf
    if StringRight($in_deps_array[$element],7) = "[INFO] " Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -= 1
   EndIf
   if StringLeft($in_deps_array[$element],12) = "[INFO] BUILD" Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -= 1
   EndIf
   if StringLeft($in_deps_array[$element],12) = "[INFO] Total" Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -= 1
   EndIf
   if StringLeft($in_deps_array[$element],15) = "[INFO] Finished" Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -= 1
   EndIf
   if StringLeft($in_deps_array[$element],12) = "[INFO] Final" Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -= 1
   EndIf
   if StringInStr($in_deps_array[$element],"........") Then
	  _ArrayDelete($in_deps_array, $element)
	  $element -=1
   EndIf

   ; Hübsch machen
   if StringRight($in_deps_array[$element],7) = "compile" Then
	  $in_deps_array[$element] = StringLeft($in_deps_array[$element], StringLen($in_deps_array[$element])-8)
   EndIf
   if StringRight($in_deps_array[$element],4) = "test" Then
	  $in_deps_array[$element] = StringLeft($in_deps_array[$element], StringLen($in_deps_array[$element])-4)
   EndIf
   if StringLeft($in_deps_array[$element],10) = "[INFO]    " Then
	  $in_deps_array[$element] = StringRight($in_deps_array[$element], StringLen($in_deps_array[$element])-10)
   EndIf
   if StringRight($in_deps_array[$element],8) = "provided" Then
	  $in_deps_array[$element] = StringLeft($in_deps_array[$element], StringLen($in_deps_array[$element])-9)
   EndIf
   if StringRight($in_deps_array[$element],7) = "runtime" Then
	  $in_deps_array[$element] = StringLeft($in_deps_array[$element], StringLen($in_deps_array[$element])-8)
   EndIf
   If StringRight($in_deps_array[$element],11) = "aopalliance" Then
	  $in_deps_array[$element] = StringLeft($in_deps_array[$element], StringLen($in_deps_array[$element])-11)
   EndIf

   ;CSV tauglich machen
   ; Doppelpunkte gegen Semikolon tauchen
   $in_deps_array[$element] = StringReplace ($in_deps_array[$element], ":", ";")
   ; Strings entfernen
   $in_deps_array[$element] = StringReplace ($in_deps_array[$element], ";jar;", ";")
   $in_deps_array[$element] = StringReplace ($in_deps_array[$element], ";test-jar;", ";")
   $in_deps_array[$element] = StringReplace ($in_deps_array[$element], ";tests;", ";")
   $in_deps_array[$element] = StringReplace ($in_deps_array[$element], ";pom;", ";")
   $in_deps_array[$element] = StringReplace ($in_deps_array[$element], ";sources;", ";")

   if StringRight($in_deps_array[$element],1)= ";" Then
	  $in_deps_array[$element] = StringLeft($in_deps_array[$element], StringLen($in_deps_array[$element])-1)
   EndIf

   if $element = ubound($in_deps_array) - 1 Then ExitLoop
Next

; Array alphabetisch sortieren
_ArraySort($in_deps_array)
$out_deps_array = _ArrayUnique($in_deps_array, $ARRAYUNIQUE_NOCOUNT)

_ArrayDisplay($out_deps_array)

Dim $outArray[1][4]

; Oberste Kopfzeile im neuen 2D Array definieren
_ArrayAdd($outArray, "Supplier Name;Product ID;Product Name;Version", 0, ";")

; Arrayeintrag um Element ID -2 (Counter und Header) ergänzen
For $i = 1 To $out_deps_array[0] -1
   Dim $aString
   Local $element
   $aString = StringSplit($out_deps_array[$i],";")

   If $aString[0] = 3 Then
	  $element = $aString[1] & ';' & $i-2 & ';' & $aString[2] & ';"' & $aString[3] & '"'
	  _ArrayAdd($outArray, $element, 0, ";", $ARRAYFILL_FORCE_STRING)
   EndIf
Next
_ArrayDelete($outArray, 0)
_ArrayDisplay($outArray)

$save_file = FileSaveDialog("Datei speichern", @ScriptDir & "\", "Comma-Seperated List (*.csv)", $FD_PROMPTOVERWRITE, $FD_PATHMUSTEXIST)
; Ausgabe Array in Datei schreiben
_FileWriteFromArray ($save_file, $outArray, 2, Default, ";")
