<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def process_image(path, bands=None, verbose=False, pansharpen=False, ndvi=False, force_unzip=None, ndvigrey=False, bounds=None):
 """ Handles constructing and image process. :param path: The path to the image that has to be processed :type path: String :param bands: List of bands that has to be processed. (optional) :type bands: List :param verbose: Sets the level of verbosity. Default is False. :type verbose: boolean :param pansharpen: Whether to pansharpen the image. Default is False. :type pansharpen: boolean :returns: (String) path to the processed image """

    try:
        bands = convert_to_integer_list(bands)
        if pansharpen:
            p = PanSharpen(path, bands=bands, dst_path=settings.PROCESSED_IMAGE,
                           verbose=verbose, force_unzip=force_unzip, bounds=bounds)
        elif ndvigrey:
            p = NDVI(path, verbose=verbose, dst_path=settings.PROCESSED_IMAGE, force_unzip=force_unzip, bounds=bounds)
        elif ndvi:
            p = NDVIWithManualColorMap(path, dst_path=settings.PROCESSED_IMAGE,
                                       verbose=verbose, force_unzip=force_unzip, bounds=bounds)
        else:
            p = Simple(path, bands=bands, dst_path=settings.PROCESSED_IMAGE, verbose=verbose, force_unzip=force_unzip,
                       bounds=bounds)

    except IOError as err:
        exit(str(err), 1)
    except FileDoesNotExist as err:
        exit(str(err), 1)

    return p.run()