#!/usr/bin/env python3
import sys
import resource
import logging


import NetLib
import ogGlobals
import SystemLib
import DiskLib
import NetLib


from GitLib import OpengnsysGitLibrary, NTFSImplementation, OgProgressPrinterWeb


def create_image(disk_num, partition_num, repo, image_name, tagName):

    ntfs_impl = NTFSImplementation.NTFS3G
    og_git = OpengnsysGitLibrary(ntfs_implementation = ntfs_impl)
    og_git.progress_callback = OgProgressPrinterWeb()

    device = DiskLib.ogDiskToDev(disk_num, partition_num)
    if og_git.initRepo(device, image_name):
        return 0
        #if tagName:
        #    og_git.tag(device = device, tagName = tagName, commit = "HEAD", message = "Image created")
    else:
        return 1


def main():

    soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
    try:
        # Usamos el mínimo entre 65536 y el límite hard disponible
        new_limit = min(65536, hard)
        resource.setrlimit(resource.RLIMIT_NOFILE, (new_limit, hard))
        print(f"RLIMIT_NOFILE establecido a: {resource.getrlimit(resource.RLIMIT_NOFILE)}")
    except ValueError as e:
        print(f"No se pudo aumentar el límite de archivos abiertos: {e}")



    if len(sys.argv) != 6:
        sys.exit(SystemLib.ogRaiseError([], ogGlobals.OG_ERR_FORMAT, "Incorrect number of arguments. Usage: CrearImagenGit.py disk_num partition_num image_name repo tag"))

    # repo - repositorio, ip address. Opcional porque oglive lo recibe como parametro de kernel
    # tag - tag a crear automaticamente. Opcional, no necesitamos crear un tag siempre.


    disk_num, partition_num, image_name, repo, tag = sys.argv[1:6]


    opengnsys_log_dir = "/opt/opengnsys/log"
    ip_address = NetLib.ogGetIpAddress()
    logFilePath = f"{opengnsys_log_dir}/{ip_address}.log"

    fileLog = logging.FileHandler(logFilePath)
    fileLog.setLevel(logging.DEBUG)

    formatter = logging.Formatter('%(asctime)s - %(name)24s - [%(levelname)5s] - %(message)s')

    fileLog.setFormatter(formatter)

    logger = logging.getLogger(__package__)
    logger.setLevel(logging.DEBUG)
    logger.addHandler(fileLog)

    logger.info("Starting CrearImagenGit")


    retval = create_image(disk_num, partition_num, repo, image_name, tag)



    sys.exit(retval)

if __name__ == "__main__":
    main()
