#!/usr/bin/env python3

"""
Create a netcdf file for a cubed sphere geometry, with given vertical and
horizontal resolution, adding requested variable (to be set to 0).
"""

from utils import check_minimum_python_version
check_minimum_python_version(3, 4)

import argparse, sys, pathlib

from nc_file_init import nc_file_init

###############################################################################
def parse_command_line(args, description):
###############################################################################
    parser = argparse.ArgumentParser(
        usage="""\n{0} <ARGS> [--verbose]
OR
{0} --help

\033[1mEXAMPLES:\033[0m
    \033[1;32m# Creates netcdf file 'my_file.nc' for ne4np4 and 72 vertical levels\033[0m

        > ./{0} -f my_file.nc -ne 4 -np 4 -nlev 72

    \033[1;32m# Creates netcdf file 'my_file.nc' for with 63 columns and 72 vertical levels.
      If a file named 'my_file.nc' already exists, it overwrites it.\033[0m

        > ./{0} -o -f my_file.nc -ncol 63 -nlev 72

""".format(pathlib.Path(args[0]).name),
        description=description,
        formatter_class=argparse.ArgumentDefaultsHelpFormatter
    )

    # The file name
    parser.add_argument("-f","--output-file", help="Name of the netcdf file", required=True)

    # If we're creating the file, we need a few info
    parser.add_argument("-ne","--ne", type=int, help="Number of elements on cube edge", default=0)
    parser.add_argument("-np","--np", type=int, help="Number of GLL points on element edge", default=4)
    parser.add_argument("-ncol","--ncol", type=int, help="Number of columns", default=0)
    parser.add_argument("-nlev","--nlev", type=int, help="Number of vertical levels", default=0)
    parser.add_argument("-pg","--phys-grid", help="Type of phys grid", default="gll")

    # Whether we're allowed to overwrite existing data
    parser.add_argument("-o","--overwrite", help="Overwrite possibly existing variable values",
                        action="store_true", default=False)

    return parser.parse_args(args[1:])

###############################################################################
def _main_func(description):
###############################################################################

    success = nc_file_init(**vars(parse_command_line(sys.argv, description)))

    print("File generation: {}".format("SUCCESS" if success else "FAIL"))

    sys.exit(0 if success else 1)

###############################################################################

if (__name__ == "__main__"):
    _main_func(__doc__)
