#!python
from __future__ import absolute_import
import pkg_resources
from transfer_agents.rucio_functions import RucioData
from transfer_agents import yamlconfig
from transfer_agents import jsonconfig

import os
import argparse

if __name__ == "__main__":
    """
    Realiza la replicación de archivos utilizando Rucio y procesa los archivos replicados en ElasticSearch.

    :raises: Exception en caso de errores en la configuración de Rucio o en la replicación de archivos.
    """

    # Instantiate the parser
    parser = argparse.ArgumentParser(description='Argument app description')
    # Required positional argument
    parser.add_argument('-c', '--config',
                        help='A required string with yaml configuration file path argument',
                        required=False, default=yamlconfig)
    parser.add_argument('-e', '--elastic',
                        help='A required string with json template file path argument',
                        required=False, default=jsonconfig)
    args = parser.parse_args()

    # Check if paths exist
    if not os.path.exists(args.config):
        print(f"Configuration file '{args.config}' does not exist. Using default config file '{yamlconfig}'")

    if not os.path.exists(args.elastic):
        print(f"Elasticsearch template file '{args.elastic}' does not exist. Using default elasticsearch file '{jsonconfig}'")
        
    # Configurar y obtener parámetros de replicación de Rucio
    config = RucioData(default_path=args.config, es_body=args.elastic)

    config.rucio_replication_parameters()

    # Realizar la replicación de archivos utilizando Rucio
    try:
        config.replication_files_rucio()
    except Exception as e:
        raise Exception(f"Error en la replicación de archivos: {str(e)}")

    # Procesar los archivos replicados en ElasticSearch
    try:
        config.es.process_files(config.rucio_scope)
    except Exception as e:
        raise Exception(f"Error al procesar archivos en ElasticSearch: {str(e)}")