import argparse
from EndoCalibrator import EndoCalibrator
from Movie2imgConverter import Movie2imgConverter
from DumpTxtEditor import DumpTxtEditor

parser = argparse.ArgumentParser()
parser.add_argument("--mode", type=str, required=True, choices=["calibrate", "convert", "convert_iphone", "edit_txt"], help="処理モード")
parser.add_argument("--resized_height", type=int, default=352, help="画像サイズの高さ（幅もだが，アップサンプリングの"
                                                                    "関係で2の乗数を多く含む方が良い)")
parser.add_argument("--resized_width", type=int, default=480, help="画像サイズの幅")

# カメラキャリブレーション用
parser.add_argument("--imgs_dir", type=str, default="./tmp", help="チェス画像が入ってるディレクトリ,キャリブ時はrequired")
parser.add_argument("--npy_outdir", type=str, default="./params", help="カメラキャリブレーション結果の出力先")
parser.add_argument("--square_size", type=float, default=20.0, help='正方形の一辺のサイズ[mm]')
parser.add_argument("--pattern_size_col", type=int, default=6, help="チェスの列数")
parser.add_argument("--pattern_size_row", type=int, default=9, help="チェスの行数")
parser.add_argument("--chess_img_extend", type=str, default=".JPG", help="チェス画像の拡張子")

# 映像変換用
parser.add_argument("--movie_dir", type=str, default="./tmp", help="入力動画のディレクトリ，映像変換時はrequired")
parser.add_argument("--out_dir", type=str, default="./out", help="出力用のディレクトリ")
parser.add_argument("--param_dir", type=str, default="./params", help="カメラキャリブレーションで取得したパラメータ先")
parser.add_argument("--pass_num", type=int, default=1, help="フレーム間の間(1で連続したフレーム)")
parser.add_argument("--endo_movie_extend", type=str, default=".mp4", help="入力動画の拡張子")
parser.add_argument("--thresh_num", type=int, default=180, help='inpaint用の閾値')

# dump用テキスト編集用(この機能は動的な対応が出来ていない気がするから使用時は要チェック)
parser.add_argument("--dump_dir", type=str, default="./dump", help="dumpのディレクトリ")
parser.add_argument("--dump_dir_name", type=str, default="imgs_{}seq", help="dumpのサブディレクトリの名前，{}はformatで使う")
parser.add_argument("--eso_imgs_dir", type=str, default="./esoimg", help="食道の画像のディレクトリ")
parser.add_argument("--imgs_name", type=str, default="{}seq", help="imgのsubdir名")
parser.add_argument("--choice_interval", type=int, default=1, help="連番のデータの間隔(1で連続)")
parser.add_argument("--txt_name", type=str, default="train.txt", help="編集するtxtの名前")

args = parser.parse_args()

if __name__ == '__main__':
    mode = args.mode

    if mode == 'calibrate':
        editor = EndoCalibrator(args)
        editor.calibrate_row_size(Is_example_showed=True)

    if mode == 'convert':
        editor = Movie2imgConverter(args)
        editor.convert_endo_movie2img()

    if mode == 'convert_iphone':
        editor = Movie2imgConverter(args)
        editor.convert_iphone_movie2img()

    if mode == 'edit_txt':
        editor = DumpTxtEditor(args)
        editor.edit_dump_txt()
