






"""simple docstring"""
from __future__ import annotations

from string import ascii_letters






def        lowerCamelCase_  (						_lowerCamelCase			,   _lowerCamelCase			,   _lowerCamelCase = None				):
 lowerCamelCase__     :			Any     				=						alphabet or ascii_letters

 # The final result string
 lowerCamelCase__     :			Union[str, Any]     				=						''

 for character in input_string:
  if character not in alpha:
   # Append without encryption if character is not in the alphabet
   result += character
  else:
   # Get the index of the new key and make sure it isn't too large
   lowerCamelCase__     :			List[str]     				=						(alpha.index(_lowerCamelCase				) + key) % len(_lowerCamelCase				)

   # Append the encoded character to the alphabet
   result += alpha[new_key]

 return result






def        lowerCamelCase_  (						_lowerCamelCase			,   _lowerCamelCase			,   _lowerCamelCase = None				):
 key *= -1

 return encrypt(_lowerCamelCase			,   _lowerCamelCase			,   _lowerCamelCase				)






def        lowerCamelCase_  (						_lowerCamelCase			,   _lowerCamelCase = None				):
 lowerCamelCase__     :			List[Any]     				=						alphabet or ascii_letters

 # To store data on all the combinations
 lowerCamelCase__     :			List[Any]     				=						{}

 # Cycle through each combination
 for key in range(1			,   len(_lowerCamelCase				) + 1				):
  # Decrypt the message and store the result in the data
  lowerCamelCase__     :			Optional[Any]     				=						decrypt(_lowerCamelCase			,   _lowerCamelCase			,   _lowerCamelCase				)

 return brute_force_data


if __name__ == "__main__":
      while True:
            print(f"\n{'-' * 10}\n Menu\n{'-' * 10}")
            print(*["1.Encrypt", "2.Decrypt", "3.BruteForce", "4.Quit"], sep="\n")

            # get user input
            A_			: Tuple				=			input("\nWhat would you like to do?: ").strip() or "4"

            # run functions based on what the user chose
            if choice not in ("1", "2", "3", "4"):
                  print("Invalid choice, please enter a valid choice")
            elif choice == "1":
                  A_			: Tuple				=			input("Please enter the string to be encrypted: ")
                  A_			: Optional[int]				=			int(input("Please enter off-set: ").strip())

                  print(encrypt(input_string, key))
            elif choice == "2":
                  A_			: Dict				=			input("Please enter the string to be decrypted: ")
                  A_			: Optional[Any]				=			int(input("Please enter off-set: ").strip())

                  print(decrypt(input_string, key))
            elif choice == "3":
                  A_			: Dict				=			input("Please enter the string to be decrypted: ")
                  A_			: Tuple				=			brute_force(input_string)

                  for key, value in brute_force_data.items():
                        print(f"Key: {key} | Message: {value}")

            elif choice == "4":
                  print("Goodbye.")
                  break









"""simple docstring"""
from cva import destroyAllWindows, imread, imshow, waitKey






def        lowerCamelCase_  (						_lowerCamelCase			,   _lowerCamelCase				):
 lowerCamelCase__				,     lowerCamelCase__     :			Optional[Any]     				=						img.shape[0], img.shape[1]

 def to_grayscale(_lowerCamelCase			,   _lowerCamelCase			,   _lowerCamelCase				):
  return 0.2_126 * red + 0.587 * green + 0.114 * blue

 def normalize(_lowerCamelCase				):
  return min(_lowerCamelCase			,   255				)

 for i in range(_lowerCamelCase				):
  for j in range(_lowerCamelCase				):
   lowerCamelCase__     :			List[Any]     				=						int(to_grayscale(*img[i][j]				)				)
   lowerCamelCase__     :			Optional[int]     				=						[
       normalize(_lowerCamelCase				),
       normalize(greyscale + factor				),
       normalize(greyscale + 2 * factor				),
   ]

 return img


if __name__ == "__main__":
      # read original image
      A_			: List[str]				=			{
          percentage: imread("image_data/lena.jpg", 1) for percentage in (10, 20, 30, 40)
      }

      for percentage, img in images.items():
            make_sepia(img, percentage)

      for percentage, img in images.items():
            imshow(f"Original image with sepia (factor: {percentage})", img)

      waitKey(0)
      destroyAllWindows()

