import utils

if __name__ == '__main__':
    _original = utils.get_file('pixel_character.pbm')
    #_original = utils.get_file('tetris_example.pbm')
    _pbm_content = utils.BitMapFile(_original)

    while True:
        print("\n1) print file info")
        print("2) Preview arithmetic codification info ")
        print("3) Encode with arithmetic style ")
        print("4) Decode with arithmetic style ")
        print("5) Apply XOR to image before compression \n")
        _user_input = input("your option --> ")

        if _user_input == "1":
            print("\n*** PORTABLE BITMAP FILE INFO ***")
            print(f"magic number:{_pbm_content.magic_number},\nimage width:{_pbm_content.image_width},image height:{_pbm_content.image_height}")
            print(f"Zeros ---> {_pbm_content.zeros}")
            print(f"Uns --->  {_pbm_content.ones}")
            print("***** \t ******** \t *****\n")
            input("<back to menu>")
        if _user_input == "2":
            utils.arithmetic_cod_preview(_pbm_content)
        if _user_input == "3":
            _result_option_1, _result_option_2 = utils.arithmetic_encode_image(_pbm_content)
            with open('arithmetic_output_opt1.txt', 'w') as f:
                f.write(_result_option_1)
            with open('arithmetic_output_opt2.txt', 'w') as f:
                f.write(_result_option_2)
        if _user_input == "4":
            _result = utils.arithmetic_decode_file('arithmetic_output_opt2.txt')
            with open('arithmetic_decode_output.pbm', 'w') as f:
                f.write(_result)
        if _user_input == "5":
            _new_pbm = _pbm_content
            _xor_on_image = utils.xor(_new_pbm.image_array,int(_new_pbm.image_width),int(_new_pbm.image_height))
            _new_pbm.image_arra = _xor_on_image
            _, _result = utils.arithmetic_encode_image(_new_pbm)
            print(_result)
            with open('arithmetic_output_wxor.txt', 'w') as f:
                f.write(_result)