"""
Lab001, часть 2.
Русский текст, символы, байты и кодировка UTF-8.

Цель:
1. Увидеть разницу между количеством символов и количеством байтов.
2. Посмотреть, сколько байтов занимает каждая русская буква.
3. Восстановить исходный текст из байтов.
"""

# Исходное сообщение
message = "ПРИВЕТ SDR"

# Преобразование текста в байты UTF-8
encoded_message = message.encode("utf-8")

# Обратное преобразование байтов в текст
decoded_message = encoded_message.decode("utf-8")


print("Исходный текст:")
print(message)

print("\nКоличество символов:")
print(len(message))

print("\nКоличество байтов UTF-8:")
print(len(encoded_message))

print("\nОбъект bytes:")
print(encoded_message)

print("\nВсе байты в десятичном виде:")
print(list(encoded_message))

print("\nПодробно по каждому символу:")

for character in message:
    character_bytes = character.encode("utf-8")

    decimal_bytes = list(character_bytes)

    binary_bytes = " ".join(
        f"{byte:08b}" for byte in character_bytes
    )

    print(
        f"{character!r:>4} "
        f"→ байтов: {len(character_bytes)} "
        f"→ числа: {decimal_bytes} "
        f"→ биты: {binary_bytes}"
    )

print("\nВосстановленный текст:")
print(decoded_message)

# Автоматические проверки
assert decoded_message == message
assert len(encoded_message) >= len(message)

print("\nПроверка пройдена: русский текст восстановлен без ошибок.")