# region IMPORTS
from tkinter import Tk
from tkinter.filedialog import askopenfile
from pathlib import Path

from wplay.utils import browser_config
from wplay.utils.target_search import search_target_by_number
from wplay.utils import io
from typing import List
from wplay.utils.helpers import data_folder_path
from wplay.utils.Logger import Logger
# endregion

# region LOGGER
__logger = Logger(Path(__file__).name)
# endregion


class InvalidNumber(Exception):
    message = "Either Number is invalid or no account exist for the number or the number was kept in wrong format :(\n"


def ProcessNumbers():
    __logger.info("Processing numbers.")
    print("Choose a text file containing full numbers with country code, one number per line.")
    Tk().withdraw()
    filename = askopenfile(
            initialdir=data_folder_path,
            title='Choose a text file with numbers.',
            filetypes=[("text files", "*.txt")],
            mode="r"
            )
    numbers = filename.readlines()
    for i in range(len(numbers)):
        number = numbers[i].strip("\n+")
        numbers[i] = number
    return numbers


async def broadcast():
    __logger.info("Broadcast message.")
    FailureReport = list()
    page, _ = await browser_config.configure_browser_and_load_whatsapp()
    numbers = ProcessNumbers()
    message: List[str] = io.ask_user_for_message_breakline_mode()

    for number in numbers:
        if await search_target_by_number(page, number):
            await io.send_message(page, message)

    __logger.info("Messages broadcasted successfully!")
    print("Messages broadcasted successfully!")