import argparse


class ArgParser:
    parser = None
    args = None
    def __init__(self):
        self.parser = argparse.ArgumentParser(add_help=False)
        self.parser._action_groups.pop()

        obligatoryArgs = self.parser.add_argument_group("Argumentos obligatorios")
        obligatoryArgs.add_argument('-p', '--pin', help="Contraseña", type=int)
        obligatoryArgs.add_argument('-t', '--type', help="Tipo marcado. 0 = Entrada, 1 = Salida", type=int)

        optionalArgs = self.parser.add_argument_group("Argumentos opcionales")
        optionalArgs.add_argument('-bt', '--basedtime', help="Hacer check o descheck según la hora del dia",
                                  action="store_true")
        optionalArgs.add_argument('-h', '--help', action="help", help="Esta ayuda")
        optionalArgs.add_argument('-d', '--debug', action='store_true')

        optionalArgs.add_argument('-f', '--force', action='store_true')

        optionalArgs.add_argument('-c', '--config', help="Rúta al archivo de configuración")
        optionalArgs.add_argument('-u', '--user', help="Usuario")
        optionalArgs.add_argument('-glo', '--geoLongitude', help="GEO Longitud", type=float)
        optionalArgs.add_argument('-gla', '--geoLatitude', help="GEO Latitud", type=float)
        optionalArgs.add_argument('-ga', '--geoAccuracy', help="GEO Accuracy", type=float)

    def check(self):
        if self.args.type is None and self.args.basedtime is False:
            print("Hay que indicar al menos un metodo de fichaje -t <0 o 1> o -bt")
            exit(20)

    def parse(self):
        self.args = self.parser.parse_args()
        self.check()

        return self.args
