<?xml version="1.0" encoding="utf-8"?>
<installer-gui-script minSpecVersion="1">
    <title>DisplayLink Manager</title>
    <background file="background.tiff" scaling="proportional" alignment="topright"/>
    <license file="Software License Agreement (EULA).rtf"/>
    <allowed-os-versions>
        <os-version min="11.0"/>
    </allowed-os-versions>
    <options customize="never" require-scripts="false" rootVolumeOnly="true" hostArchitectures="x86_64,arm64"/>
    <script><![CDATA[

    var gCurrentDisplayLinkDriverVersion = '1.9.0.148';

    function versionSplitter(shortVersion, buildVersion)
    {
        var version = shortVersion.replace('(', '').replace(')', '').replace(' ', '.');
        var ver = version.split(/[\.]/);

        if (isNaN(Number(ver[3]))) {
          ver = ver.slice(0,3)
        }
        if (ver.length >= 4)
            return [ver[0], ver[1], ver[2], ver[3]];
        if (ver.length == 3)
            return [ver[0], ver[1], ver[2], buildVersion];
        if (ver.length == 2)
            return [ver[0], ver[1], 0, buildversion];
        if (ver.length == 1)
            return [ver[0], 0, 0, buildVersion];
        return [0, 0, 0, 0];
    }

    function versionCompare(left, right)
    {
        for (i = 0; i < Math.min(left.length, right.length); ++i){
            if (isNaN(parseInt(left[i], 10)))
                return 1
            if (parseInt(left[i], 10) == parseInt(right[i], 10))
                continue;
            if (parseInt(left[i], 10) > parseInt(right[i], 10))
                return 1;
            else
                return -1;
        }
        if (left.length > right.length)
           return 1
        if (left.length < right.length)
           return -1
        return 0;
    }

    function VolumeCheck()
    {
        // do not downgrade
        if (system.files.fileExistsAtPath('/Applications/DisplayLink Manager.app/Contents/Info.plist')) {
            var driverPlist = system.files.plistAtPath('/Applications/DisplayLink Manager.app/Contents/Info.plist');
        }

        if (system.files.fileExistsAtPath('/Applications/DisplayLink Manager.app/Contents/_MASReceipt/receipt')) {
            my.result.message = "AppStore-distributed version is already installed.";
            my.result.type = 'Fatal';
            return false;
        }

        // no driver found & no app found = install
        if (!driverPlist) {
            system.log("No driver found");
            return true;
        }


        system.log("Found already installed DisplayLink driver");
        if (driverPlist.CFBundleShortVersionString) {
            buildVersionInBundleVersion = "";
            if (driverPlist.CFBundleVersion) {
              buildVersionInBundleVersion = driverPlist.CFBundleVersion
              system.log("DisplayLink previous installation found, build version:"+buildVersionInBundleVersion);
            }
            system.log("DisplayLink previous installation found:"+driverPlist.CFBundleShortVersionString);
            bundleVersion = versionSplitter(driverPlist.CFBundleShortVersionString.trim(), buildVersionInBundleVersion.trim());
            currentVersion = versionSplitter(gCurrentDisplayLinkDriverVersion.trim());
            system.log("current version:"+ currentVersion.toString()+" bundle version:"+bundleVersion.toString());
            if ( (versionCompare(currentVersion, bundleVersion) > 0) || (bundleVersion[3] === "99999")) {
                return true;
            }
            system.log("DisplayLink upgrade not allowed:installer version:"+gCurrentDisplayLinkDriverVersion+" installed:"+driverPlist.CFBundleShortVersionString);
        }

        my.result.message = system.localizedString('IDS_NEWER_VERSION_PRESENT');
        my.result.type = 'Fatal';

        return false;
    }
    function requireRestart() {
      if (system.files.fileExistsAtPath('/Library/Extensions/DisplayLinkDriver.kext') ||
          system.files.fileExistsAtPath('/Library/Extensions/DisplayLinkEthernetDriver.kext')) {
        system.log("KEXT found, Requiring restart")
        return "RequireRestart";
      }
      system.log("No KEXT found, not requiring restart")
      return "None";
    }
    ]]></script>
    <volume-check script="VolumeCheck()"/>
    <choices-outline>
        <line choice="com.displaylink.displaylinkmanagerapp"/>
    </choices-outline>
    <choice id="com.displaylink.displaylinkmanagerapp" enabled="false" selected="true">
        <pkg-ref id="com.displaylink.displaylinkmanagerapp"/>
    </choice>
    <pkg-ref id="com.displaylink.displaylinkmanagerapp" version="1.9.0.148" onConclusionScript="requireRestart()" installKBytes="17233">#DisplayLinkManagerApp.pkg</pkg-ref>
    <pkg-ref id="com.displaylink.displaylinkmanagerapp">
        <bundle-version>
            <bundle CFBundleShortVersionString="1.9.0" CFBundleVersion="148" id="com.displaylink.DisplayLinkUserAgent" path="DisplayLink Manager.app"/>
            <bundle CFBundleShortVersionString="1.9.0" CFBundleVersion="148" id="com.displaylink.DisplayLinkLoginHelper" path="DisplayLink Manager.app/Contents/Library/LoginItems/DisplayLinkLoginHelper.app"/>
        </bundle-version>
    </pkg-ref>
    <product id="com.displalink.app" version="1.9.0.148"/>
</installer-gui-script>