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

# Desarrollado por Daniel Queirolo <danf.1979@gmail.com>
# Actualización Eric Herrera <eric.gnome@gmail.com>

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()
            if opcion == "1":
                self.option_one()
            elif opcion == "2":
                self.option_two()                
            elif opcion == "3":
                self.option_tree()
            elif opcion == "4":
                self.option_four()
            elif opcion == "5":
                self.option_five()
            elif opcion == "q":
                sys.exit(1)
            else:
                print "Comando no reconocido"
                time.sleep(2)

   	# 1: Instalar un OS desde el cdrom
    def option_one(self):
        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"

        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
    def option_two(self):
        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"

        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
    def option_tree(self):
        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
    def option_four(self):
        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
    def option_five(self):
        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)
             
if __name__ == "__main__":
    app = Qemu()
    app.main()
