import sys
import os
import SystemLib
import DiskLib
import FileSystemLib
import NetLib
import FileLib

#!/usr/bin/env python3
"""
bootOsCustom
@brief   Plantilla para script de configuración personalizada de sistema operativo restaurado.
@param   $1 nº de disco 
@param   $2 nº de partición 
@warning Renombrar este fichero como "bootOsCustom" para personalizar el script estándar "bootOs".
@note    La partición a inicializar debe estar montada
@version 1.1.1 Soporta varios discos
"""

# CONFIGURAR: Partición de datos de Windows que no queremos ocultar (valor por defecto '0' no oculta nada)
DISKDATA = 0
PARTDATA = 0

PROG = os.path.basename(__file__)

# Control de errores
if len(sys.argv) < 3:
    SystemLib.ogRaiseError(OG_ERR_FORMAT, f"Formato: {PROG} ndisco nparticion")
    sys.exit(1)

# Parámetros obligatorios.
DISK = sys.argv[1]  # Nº de disco.
PART = sys.argv[2]  # Nº de partición.

# Paso 0: Añadir código para realizar control de errores de los parámetros de entrada (recomendado).
DEVICE = DiskLib.ogDiskToDev(DISK, PART)
if not DEVICE:
    sys.exit(1)

# Paso 1: Adaptar el código de ejemplo para arranque personalizado.
# Nota: el script "bootOs" llama al script "bootOsCustom" después de realizar la operaciones de inicio estándar y antes de desmontar las particiones e iniciar el sistema operativo.

MNTDIR = FileSystemLib.ogMount(DISK, PART)
if not MNTDIR:
    sys.exit(1)

NAME = NetLib.ogGetHostname()
NAME = NAME if NAME else "pc"
OSTYPE = Inventory.ogGetOsType(DISK, PART)

if OSTYPE == "Windows":
    # Mostrar las particiones NTFS de sistema (dos opciones)
    # Opción 1: SIN ocultar las demás.
    # SystemLib.ogEcho log session "[40] Mostrar y activar particion de Windows {PART}."
    # if DiskLib.ogGetPartitionType(DISK, PART) in ["HNTFS", "WIN-RESERV"]:
    #     DiskLib.ogUnhidePartition(DISK, PART)

    # Recorremos los distintos discos
    # for DEVICE in DiskLib.ogDiskToDev():
    #     d = DiskLib.ogDevToDisk(DEVICE)

    #     # Mostrar las particiones NTFS de sistema (dos opciones)
    #     # Opción 2: Ocultamos las demás.
    #     SystemLib.ogEcho log session "[40] Activar particion de Windows {PART} y ocultar las demás."
    #     for i in range(1, DiskLib.ogGetPartitionsNumber(d) + 1):
    #         if (d == DISK and i == PART) or (d == DISKDATA and i == PARTDATA):
    #             if DiskLib.ogGetPartitionType(d, i) in ["HNTFS", "WIN-RESERV"]:
    #                 DiskLib.ogUnhidePartition(d, i)
    #         else:
    #             if DiskLib.ogGetPartitionType(d, i) in ["NTFS", "WINDOWS"]:
    #                 DiskLib.ogHidePartition(d, i)

    #     # Borrar marcas de arrranque de todos los Windows instalados en el disco.
    #     SystemLib.ogEcho log session "[30] Borrar marcas de arrranque de todos los Windows instalados en el disco."
    #     for i in range(1, DiskLib.ogGetPartitionsNumber(d) + 1):
    #         if Inventory.ogGetOsType(d, i) == "Windows":
    #             FileSystemLib.ogMount(d, i)
    #     os.system("rm -f /mnt/*/ogboot.*")

elif OSTYPE == "Linux":
    # Modificar el nombre del equipo
    # SystemLib.ogEcho log session "[30] Asignar nombre Linux \"{NAME}\"."
    # ETC = FileLib.ogGetPath(DISK, PART, "/etc")
    # if os.path.isdir(ETC):
    #     with open(os.path.join(ETC, "hostname"), "w") as f:
    #         f.write(NAME)

    # Sustituir UUID o LABEL por su dispositivo en definición de sistema de archivo raíz.
    # if os.path.isfile(os.path.join(ETC, "fstab")):
    #     SystemLib.ogEcho log session "[40] Actualizar fstab con particion raíz \"{PART}\"."
    #     with open(os.path.join(ETC, "fstab"), "r") as f:
    #         lines = f.readlines()
    #     with open("/tmp/fstab", "w") as f:
    #         for line in lines:
    #             if line.split()[1] == "/" and not line.startswith("#"):
    #                 line = line.replace(line.split()[0], PART)
    #             f.write(line)
    #     os.replace("/tmp/fstab", os.path.join(ETC, "fstab"))

    # Cambiar claves usuarios, copiando fichero /etc/passwd
    # En el servidor el nuevo fichero debe situarse en el directorio del grupo:
    # /opt/opengnsys/images/groups/nombre_aula
    # if os.path.isfile(os.path.join(ogGetGroupDir(), "passwd")):
    #     SystemLib.ogEcho log session "[65] Cambiar claves de usuarios."
    #     os.system(f"cp {os.path.join(ogGetGroupDir(), 'passwd')} {os.path.join(MNTDIR, 'etc')}")
