#!/usr/bin/env python3

import argparse
import subprocess
import os
import glob
import c4p

def main():
    parser = argparse.ArgumentParser(
            description='''
========================================================================================
 c4p: CESM for Paleo (fengzhu@ucar.edu, jiangzhu@ucar.edu)
----------------------------------------------------------------------------------------
 Usage example:
    c4p  # start a JupyterLab server at the current working directory
========================================================================================
            ''', formatter_class=argparse.RawTextHelpFormatter)

    parser.add_argument(
            '-v',
            '--version',
            action='version',
            version=f'%(prog)s version: {c4p.__version__}',
            )

    subparsers = parser.add_subparsers(help='running mode')
    subparsers.dest = 'mode'

    parser_server = subparsers.add_parser('server', help='start a Jupyterlab server')

    parser_server.add_argument(
            '-p',
            '--port',
            default=None,
            help='the port kept for the server',
            )

    parser_check = subparsers.add_parser('check', help='check the status of a specific run case given a keyword')
    parser_check.add_argument(
            '-k',
            '--keyword',
            nargs='*',
            default=None,
            help='the keyword of a specific run case',
            )

    parser_check.add_argument(
            '-o',
            '--output',
            default=None,
            help='the path of the output root',
            )

    # parse the input command line
    args = parser.parse_args()
    if args.mode == 'server':
        c4p.utils.jupyter_server(port=args.port)

    elif args.mode == 'check':
        for k in args.keyword:
            try:
                fpaths_run = glob.glob(os.path.join(args.output, f'*{k}*', 'run', '*cam.h0*'))
            except:
                fpaths_run = []

            try:
                fpaths_archive = glob.glob(os.path.join(args.output, 'archive', f'*{k}*', 'atm/hist', '*cam.h0*'))
            except:
                fpaths_archive = []

            fpaths = sorted(fpaths_run + fpaths_archive)

            c4p.utils.p_header(f'>>> The last generated ATM output for {k}:')
            c4p.utils.p_success(f'{os.path.basename(fpaths[-1])}\n')



if __name__ == '__main__':
    main()