#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import os

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

from .utils import digito_verificador, normalize_rut
from .web import ParsingException, Web
from .model_interface import get_user_rut, set_user_rut

# Enable logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    level=logging.INFO,
                    filename="log/bot.log",
                    filemode="a+")

logger = logging.getLogger(__name__)

TOKEN = os.getenv("BOT_TOKEN", None)

def start(bot, update):
    name = update.message.from_user.first_name or update.message.from_user.username
    msg = ("Hola %s, soy el bot de los vale vista pagados por la UChile. Actualmente estoy en construcción.\n"
	   "Para consultar si tienes vales vista pendientes en el banco, enviame tu rut en un mensaje: <12.345.678=9>")
    update.message.reply_text(msg % name)

def help(bot, update):
    update.message.reply_text(("Estoy para ayudarte, si no sabes como utilizar este bot, envia /start. "
			       "Si tienes comentarios/sugerencias/quejas escribele a mi creador: fmontotomonroy@gmail.com"
			       ", cuando tenga tiempo quizas te responda, o quizás no, a mi me dejo a medio terminar =("))

def msg(bot, update):
    logger.info("MSG:[%s]", update.message.text)
    is_rut = normalize_rut(update.message.text)
    if not is_rut:
        echo(bot, update)
    else:
        rut(bot, update, is_rut)

def echo(bot, update):
    update.message.reply_text(update.message.text)

def set_rut(bot, update):
    spl = update.message.text.split(' ')
    if len(spl) < 2:
        update.message.reply_text("Especifica el rut para poder guardarlo.")
    rut = normalize_rut(spl[1])

    if not normalize_rut(spl[1]):
        update.message.reply_text("Rut no valido.")
        return
    set_user_rut(update.message.from_user.id, normalize_rut(spl[1]))
    update.message.reply_text("Rut:%s-%s guardado correctamente" % (rut, digito_verificador(rut)))

def get_by_rut(bot, update):
    rut_ = get_user_rut(update.message.from_user.id)
    if rut_:
        return rut(bot, update, rut_)
    update.message.reply_text("No hay un rut almacenado, utiliza '/set <RUT>' para almacenarlo.")

def rut(bot, update, rut):
    try:
        response = Web(rut, digito_verificador(rut)).get_parsed_results(update.message.from_user.id)
    except ParsingException as e:
        update.message.reply_text(e.public_message)
    except Exception as e:
        logger.error(e)
        update.message.reply_text("ups, un error ha ocurrido =( lo solucionaremos a la brevedad (?)")
    else:
        update.message.reply_text(response)

def debug(bot, update):
    logger.info("Debug: %s, %s" % (bot, update))

def error(bot, update, error):
    logger.warn("Update %s caused error %s" % (update, error))

def main():
    updater = Updater(TOKEN)

    dp = updater.dispatcher

    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("set", set_rut))
    dp.add_handler(CommandHandler("get", get_by_rut))
    dp.add_handler(CommandHandler("debug", debug))
    dp.add_handler(CommandHandler("help", help))

    dp.add_handler(MessageHandler(Filters.text, msg))

    dp.add_error_handler(error)
    updater.start_webhook(listen="0.0.0.0", port=443, url_path="/bot-valevista")
    updater.idle()

if __name__ == "__main__":
    main()

@@ -145,16 +145,19 @@
 s%0A%0Afrom 
+src
 .utils i
@@ -201,16 +201,19 @@
 ut%0Afrom 
+src
 .web imp
@@ -243,16 +243,19 @@
 eb%0Afrom 
+src
 .model_i
@@ -817,16 +817,20 @@
 %5Cn%22%0A%09   
+    
 %22Para co
@@ -895,15 +895,27 @@
 ame 
-tu
+el
  rut 
+a consultar 
 en u
@@ -927,11 +927,37 @@
 saje
+, %22%0A           %22por ejemplo
 : 
-%3C
 12.3
@@ -966,385 +966,815 @@
 .678
-=9%3E%22)%0A    update.message.reply_text(msg %25 name)%0A%0Adef help(bot, update):%0A    update.message.reply_text((%22Estoy para ayudarte, si no sabes como utilizar este bot, envia /start. %22%0A%09%09%09       %22Si tienes comentarios/sugerencias/quejas escribele a mi creador: fmontotomonroy@gmail.com%22%0A%09%09%09       %22, cuando tenga tiempo quizas te responda, o quiz%C3%A1s no, a mi me dejo a medio terminar =(
+-9.%5Cn%22%0A           %22Si quieres que recuerde tu rut para consultarlo recurrentemente, envia: /set TU_RUT. %22%0A           %22Luego consultalo enviando /get.%22)%0A    update.message.reply_text(msg %25 name)%0A%0Adef help(bot, update):%0A    update.message.reply_text((%22Estoy para ayudarte, si no sabes como utilizar o para que sirve este bot, %22%0A                               %22envia /start.%5Cn%22%0A                               %22Si tienes comentarios/sugerencias/quejas abre un issue en el github del proyecto: %22%0A                               %22https://https://github.com/fmontoto/bot-valevista, si estas de suerte alguien se %22%0A                               %22puede apiadar y ayudarte. De lo contrario puedes enviar un Pull Request con lo que %22%0A                               %22solucione el problema o con una nueva funcionalidad.
 %22))%0A

Improve help messages