#!/usr/bin/env python3
import argparse
import logging
import sys

from video_marker import __version__
from video_marker.video_marker import VideoMarker
from video_marker.utils import print_available_codecs


parser = argparse.ArgumentParser(
    description=f"{__file__} prepends, appends and adds a watermark to your live video recording.",
    epilog=f"{__file__} arguments",
    formatter_class=argparse.RawTextHelpFormatter
)
parser.add_argument(
    '--video-cap',
    required=False,
    default="0",
    help=("select a video source, 0 means your first camera device. You can even use a video image path.")
)
parser.add_argument(
    '--resolution',
    required=False,
    default='720p',
    choices = ['360p', '480p', '720p', '1080p', '4k'],
    help=("video recording resolution")
)
parser.add_argument(
    '--save-path',
    required=False,
    default='output/output.avi',
    help=("where your video recording file will be saved")
)
parser.add_argument(
    '--frames-per-seconds',
    required=False, default=50,
    type=int,
    help=("FPS")
)
parser.add_argument(
    '--watermark-fpath',
    required=False,
    help=("image file to add as watermark")
)
parser.add_argument(
    '--watermark-inverted',
    action="store_true",
    default=False,
    help=("invert watermak image")
)
parser.add_argument(
    '--watermark-size',
    type=int,
    required=False,
    help=("watermark size")
)
parser.add_argument(
    '--pre-media',
    required=False,
    help=("example: assets/intro.mp4")
)
parser.add_argument(
    '--post-media',
    required=False,
    help=("example: assets/intro.mp4")
)
parser.add_argument(
    '--slow-down-by',
    required=False, default=0,
    type=int,
    help=("how much the recording video will be slowed")
)
parser.add_argument(
    '--exception-grace-period',
    required=False, default=0.3,
    type=float,
    help=("time sleep if an exception happens reading "
          "the VideoSource during recording"
    )
)
parser.add_argument(
    '--max-recording-exceptions',
    required=False, default=4,
    type=int,
    help=("how many times the recorder retries the "
          "frame acquisition from Video device"
    )
)
parser.add_argument(
    '--monitor',
    action="store_true",
    default=False,
    help=("display a recording monitor for debug purpose ")
)
parser.add_argument(
    '-d', '--debug', required=False,
    choices=('CRITICAL', 'ERROR',
             'WARNING', 'INFO', 'DEBUG'),
    default='INFO',
    help="Debug level, see python logging; defaults to INFO if omitted"
)
parser.add_argument(
    '-v', '--version', required=False,
    action="store_true",
    help="Print version and exit"
)
parser.add_argument(
    '-sc', '--show-codecs', required=False,
    action="store_true",
    help="Print all the available codecs"
)
parser.add_argument(
    '--flip',
    required=False, default=0,
    type=int,
    choices=(0,1,-1),
    help="Flip image,: 0, 1 or -1"
)

_args = parser.parse_args()
logging.basicConfig(level=getattr(logging, _args.debug))

if _args.version:
    sys.exit(f'{__version__}')
elif _args.show_codecs:
    print_available_codecs()
    sys.exit()

vm = VideoMarker(**_args.__dict__)
vm.start()
