#!/bin/bash
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

version=0.15.15dev

LIBDIR='/usr/lib/manjaro-tools'

[[ -r ${LIBDIR}/util-msg.sh ]] && source ${LIBDIR}/util-msg.sh

import ${LIBDIR}/util.sh

if [ $# -eq 0 ]; then
    msg "No <profile>"
    msg2 "Usage: testiso <profile>"
    exit 1
fi

vdi_size=10240 # 10GB size

#Check if already exist virtual disk and in case create it
if [[ -e ~/VirtualBox\ VMs/Manjaro/Manjaro.vbox ]]; then
    msg "Manjaro Virtual Machine Found"
else 
    msg "We create a new VirtualBox Machine called Manjaro"
    msg2 "We create a new Virtual Disk Image ( vdi ) with ${vdi_size}GB"
    VBoxManage createmedium disk --filename ~/VirtualBox\ VMs/Manjaro/Manjaro.vdi --size ${vdi_size} --format VDI --variant Fixed
    
    UUID=$(VBoxManage showhdinfo ~/VirtualBox\ VMs/Manjaro/Manjaro.vdi | awk 'NR == 1  {print $2}') #uuid of vdi disk
    gui_lang=$(awk -F'[.=]' '/LANG/ {print $2}' /etc/locale.conf)

    echo '<?xml version="1.0"?>
<!--
** DO NOT EDIT THIS FILE.
** If you make changes to this file while any VirtualBox related application
** is running, your changes will be overwritten later, without taking effect.
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
-->
<VirtualBox xmlns="http://www.virtualbox.org/" version="1.16-linux">
  <Machine uuid="{d5d29291-32e4-4c8e-9633-ecc0511966da}" name="Manjaro" OSType="ArchLinux_64" snapshotFolder="Snapshots" lastStateChange="2019-08-17T15:20:11Z">
    <MediaRegistry>
      <HardDisks>
        <HardDisk uuid="{UUID}" location="Manjaro.vdi" format="VDI" type="Normal"/>
      </HardDisks>
    </MediaRegistry>
    <Hardware>
      <CPU>
        <PAE enabled="false"/>
        <LongMode enabled="true"/>
        <X2APIC enabled="true"/>
        <HardwareVirtExLargePages enabled="false"/>
      </CPU>
      <Memory RAMSize="2048"/>
      <Firmware type="EFI"/>
      <HID Pointing="USBTablet"/>
      <Display VRAMSize="16" accelerate3D="true"/>
      <VideoCapture file="." fps="25"/>
      <BIOS>
        <IOAPIC enabled="true"/>
      </BIOS>
      <USB>
        <Controllers>
          <Controller name="OHCI" type="OHCI"/>
        </Controllers>
      </USB>
      <Network>
        <Adapter slot="0" enabled="true" MACAddress="080027967634" type="82540EM">
          <NAT/>
        </Adapter>
      </Network>
      <AudioAdapter codec="AD1980" driver="Pulse" enabled="true" enabledIn="false"/>
      <RTC localOrUTC="UTC"/>
      <GuestProperties>
        <GuestProperty name="/VirtualBox/HostInfo/GUI/LanguageID" value="gui_lang" timestamp="1566055357633717000" flags=""/>
      </GuestProperties>
    </Hardware>
    <StorageControllers>
      <StorageController name="IDE" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true">
        <AttachedDevice passthrough="false" type="DVD" hotpluggable="false" port="1" device="0"/>
      </StorageController>
      <StorageController name="SATA" type="AHCI" PortCount="1" useHostIOCache="false" Bootable="true" IDE0MasterEmulationPort="0" IDE0SlaveEmulationPort="1" IDE1MasterEmulationPort="2" IDE1SlaveEmulationPort="3">
        <AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
          <Image uuid="{UUID}"/>
        </AttachedDevice>
      </StorageController>
    </StorageControllers>
  </Machine>
</VirtualBox>' > ~/VirtualBox\ VMs/Manjaro/Manjaro.vbox
 
    sed -i "s/UUID/$UUID/g" ~/VirtualBox\ VMs/Manjaro/Manjaro.vbox
    sed -i "s/gui_lang/$gui_lang/g" ~/VirtualBox\ VMs/Manjaro/Manjaro.vbox
    
    VBoxManage registervm ~/VirtualBox\ VMs/Manjaro/Manjaro.vbox #register the manjaro vbox machine
fi


VBoxManage storageattach Manjaro --storagectl IDE --port 1 --device 0 --medium emptydrive #empty the dvd drive
sleep 1

load_user_info

load_config "${USERCONFDIR}/manjaro-tools.conf" || load_config "${SYSCONFDIR}/manjaro-tools.conf"

run_dir=${cache_dir_iso}
dist_number=${dist_release}

iso_dir=$(find ${run_dir} -type d -iname $1)

iso=${iso_dir}/${dist_number}

if [[ -e $(ls ${iso}/*.iso) ]]; then
  iso_name=$(ls ${iso}/*.iso)
else msg "No ISO to load present"
     exit 1
fi

VBoxManage storageattach Manjaro --storagectl IDE --port 1 --device 0  --type dvddrive --medium $iso_name #attach dvd manjaro iso

sleep 1

msg2 "Run Vbox Manjaro with ${iso_name}"

sleep 2

VBoxManage startvm Manjaro #run vbox machine

