from telethon import TelegramClient
import asyncio
import json

from utils import parse_menu_message, InvalidMenuMessageError
import config


async def get_message_history(chat_name, limit=None):
    async with TelegramClient(config.session_name, config.api_id, config.api_hash) as client:
        chat_info = await client.get_entity(chat_name)

        messages = await client.get_messages(entity=chat_info, limit=limit)

        return messages


def parse_message_history(chat_name, limit=None):
    messages = asyncio.run(get_message_history(
        chat_name=chat_name, limit=limit))

    menus = {}
    for msg in messages:
        # Ignore messages without text conent and info messages (these usually include ! symbol)
        if msg.message is None or "!" in msg.message:
            continue

        try:
            courses = parse_menu_message(msg.message)
        except InvalidMenuMessageError as e:
            print(e)
            continue
        menus[msg.date.strftime("%d-%m-%Y")] = {"courses": courses,
                                                "message": msg.message}

    return menus


if __name__ == "__main__":
    menus = parse_message_history(config.channel_name)

    # We manually include menus in photos from July 2022
    with open("menu_photos_history.json", 'r') as file:
        data = json.load(file)
        menus.update(data)

    with open(config.menu_history_file_path, "w", encoding='utf-8') as f:
        json.dump(menus, f, ensure_ascii=False, indent=4)