import csv
import telebot

logger = telebot.logging.getLogger()
telebot.logging.basicConfig(filename="logs/bot.log",
                            datefmt='%d-%m-%Y %H:%M:%S',
                            format='%(asctime)s - %(levelname)s - %(message)s',
                            filemode='a+', encoding='utf-8',
                            level=telebot.logging.DEBUG)

with open('TOKEN.secret', 'r', encoding='utf-8') as token_file:
    TOKEN = token_file.readline()

bot = telebot.TeleBot(TOKEN, parse_mode=None)
LANG = "English"

phrases = {}
with open('src/phrases.csv', 'r', encoding='utf-8') as phrases_file:
    reader = csv.reader(phrases_file)
    for row in reader:
        phrases[row[0]] = {'English': row[1], 'Русский': row[2]}


@bot.message_handler(commands=['start'])
def send_welcome(message, language=LANG):
    chat_id = message.chat.id
    sender_fullname = message.from_user.full_name

    hello_str = phrases['hello'][language].format(sender_fullname)
    sent_msg = bot.send_message(chat_id, hello_str)

    change_language(sent_msg)

    bot.register_next_step_handler(sent_msg, send_instructions)


def set_language(message):
    global LANG

    chat_id = message.chat.id

    if message.text in ('English', 'Русский'):
        LANG = message.text[:]
        lang_chosen_str = phrases['lang_chosen'][LANG]
        bot.send_message(chat_id, lang_chosen_str)
        logger.info('Successfully changed language')
    else:
        wrong_lang_str = phrases['wrong_lang'][LANG]
        bot.send_message(chat_id, wrong_lang_str)
        logger.error('Wrong language choice')


@bot.message_handler(commands=['language'])
def change_language(message, language=LANG):
    chat_id = message.chat.id

    markup = telebot.types.ReplyKeyboardMarkup(row_width=2,
                                               one_time_keyboard=True,
                                               resize_keyboard=True)
    itembtn1 = telebot.types.KeyboardButton("English")
    itembtn2 = telebot.types.KeyboardButton("Русский")
    markup.add(itembtn1, itembtn2)
    choose_lang_str = phrases['choose_lang'][language]

    sent_choice = bot.send_message(chat_id, choose_lang_str, reply_markup=markup)

    bot.register_next_step_handler(sent_choice, set_language)
    logger.info('Waiting for input')


def send_instructions(message, language=LANG):
    chat_id = message.chat.id
    user_id = message.from_user.id

    with open('src/instruction.jpg', 'rb') as instr_pic_file:
        instruction_pic = instr_pic_file.read()

    bot.send_photo(chat_id, instruction_pic)
    instr_str = phrases['instruction'][language].format(user_id)
    bot.send_message(chat_id, instr_str)
    logger.info("Sent instructions")


@bot.message_handler(commands=['help'])
def send_help(message, language=LANG):
    help_str = phrases['help'][language]
    chat_id = message.chat.id
    bot.send_message(chat_id, help_str)
    logger.info("Sent help")


bot.infinity_polling()
