#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

# Desarrollado por Daniel Queirolo <danf.1979@gmail.com>
# Con modificaciones de Eric Herrera <eric.gnome@gmail.com>

#Pon cada caso en una funcion.
#Y Y formas un dic­cion­ario que contenga las posibles opciones como claves y las funciones #como valores.

import os 
import sys
import time

class Qemu:
    def __init__(self):
        self.imagen_img = ""
        self.tamano_img = ""
        self.memoria_img = ""
        self.imagen_iso = ""

    def main(self):
        while True:	
            opcion = None
            print "\t\tQemu's"
            print "1: Instalar un OS desde el cdrom"
            print "2: Instalar un OS desde una imagen iso"
            print "3: Arrancar un OS instalado"
            print "4: Arrancar un OS con una imagen iso en el cdrom"
            print "5: Crear una imagen iso a partir de un directorio"
            print
            print "q: Salir"
            print
            print "Ingrese su opcion: "
            line = str( sys.stdin.readline() )
            opcion = line.strip()

           	# 1: Instalar un OS desde el cdrom
            if opcion == "1":
                print "Ingrese el nombre del nuevo OS [Windows]: "
                self.imagen_img = str(sys.stdin.readline() )
                if not self.imagen_img.strip():
                    self.imagen_img = "Windows"
   
                print "Ingrese el tamano del sistema en GB [3]: "
                try:
                    self.tamano_img = int( sys.stdin.readline() )
                except ValueError:
                    self.tamano_img = "3"

                print "Ingrese el tamano de memoria ram para el OS virtual [256]: "
                try:
                    self.memoria_img = int( sys.stdin.readline() )
                except ValueError:
                    self.memoria_img = "256"

           		# Creacion de la imagen del OS
                crear_imagen = "qemu-img create %s.img %sG" % (self.imagen_img.strip(), self.tamano_img)
                os.system(crear_imagen)
                instalar_os = "qemu -hda %s.img -cdrom /dev/cdrom -m %s -user-net -boot d" % (self.imagen_img, self.memoria_img)
            	os.system(instalar_os)
            	
           	# 2: Instalar un OS desde una imagen iso
            if opcion == "2":
                print "Ingrese el nombre del nuevo OS [Windows]: "
                self.imagen_img = str( sys.stdin.readline() )
                if not self.imagen_img.strip():
                    self.imagen_img = "Windows"

                print "Ingrese el tamano del sistema en GB [3]: "
                try:
                    self.tamano_img = int( sys.stdin.readline() )
                except ValueError:
                    self.tamano_img = "3"

                print "Ingrese el tamano de memoria ram para el OS virtual [256]: "
                try:
                    self.memoria_img = int( sys.stdin.readline() )
                except ValueError:
                    self.memoria_img = "256"

                print "Ingrese el nombre de la imagen iso para montar [imagen]: "
                self.imagen_iso = str( sys.stdin.readline() )
                if not self.imagen_iso.strip():
                    self.imagen_iso = "imagen"

                # Creacion de la imagen del OS
                crear_imagen = "qemu-img create %s.img %sG" % (self.imagen_img.strip(), self.tamano_img)
                os.system(crear_imagen)
                args =  (self.imagen_img.strip(), self.imagen_iso.strip(), self.memoria_img)
                instalar_os = "qemu -hda %s.img -cdrom %s.iso -m %s -user-net -boot d" % args
                os.system(instalar_os)			
            	
           	# 3: Arrancar un sistema operativo instalado
            elif opcion == "3":
                print "Ingrese el nombre de la imagen [Windows]: "
                self.imagen_img = str( sys.stdin.readline() )
                if not self.imagen_img.strip():
                    self.imagen_img = "Windows"
                
                print "Ingrese el tamano de memoria ram para el OS virtual [256]: "
                try:
                    self.memoria_img = int( sys.stdin.readline() )
                except ValueError:
                    self.memoria_img = "256"

                correr_sistema = "qemu -hda %s.img -m %s -user-net" % (self.imagen_img.strip(), self.memoria_img)
                os.system(correr_sistema)
        	
           	# 4: Arrancar qemu con una imagen iso en el cdrom
            elif opcion == "4":
                print "Ingrese la imagen iso a cargar [imagen]: "
                self.imagen_iso = str( sys.stdin.readline() )
    	        if not self.imagen_iso.strip():
             		self.imagen_iso = "imagen"

                print "Ingrese la imagen OS a cargar [Windows]: "
                self.imagen_img = str( sys.stdin.readline() )
                if not self.imagen_img.strip():
                    self.imagen_img = "Windows"
        
                print "Ingrese el tamano de memoria ram para el OS virtual [256]: "
                try:
                    self.memoria_img = int( sys.stdin.readline() )
                except ValueError:
                    self.memoria_img = "256"

                correr_sistema = "qemu -hda %s.img -cdrom %s.iso -m %s -user-net" % (self.imagen_img.strip(), self.imagen_iso.strip(), self.memoria_img)
                os.system(correr_sistema)

           	# 5: Crear una imagen iso a partir de un directorio
            elif opcion == "5":
                flag = False
                while not flag:
                    print "Directorio para generar la iso: "
                    directorio_iso = str( sys.stdin.readline() )
                    if not directorio_iso.strip():
                        print "Escriba un directorio válido: "
                    else:
                        flag = True
                        print "Ingrese el nombre de la  iso [imagen]: "
                        self.imagen_iso = str( sys.stdin.readline() )
                        if not self.imagen_iso.strip():
                            self.imagen_iso == "imagen"
                        crear_imagen = "mkisofs -J -o %s.iso %s" % (self.imagen_iso.strip(), directorio_iso.strip())
                        os.system(crear_imagen)

            elif opcion == "q":
                sys.exit(1)
           	
            else:
                print "Comando no reconocido"
                time.sleep(2)
                
if __name__ == "__main__":
    app = Qemu()
    app.main()
