#!/usr/bin/python
# -*- coding: utf-8 -*-

# --------------------------------------------------------------------------- #
#                                                                             #
#    Plugin for iSida Jabber Bot                                              #
#    Copyright (C) diSabler <dsy@dsy.name>                                    #
#                                                                             #
#    This program is free software: you can redistribute it and/or modify     #
#    it under the terms of the GNU General Public License as published by     #
#    the Free Software Foundation, either version 3 of the License, or        #
#    (at your option) any later version.                                      #
#                                                                             #
#    This program is distributed in the hope that it will be useful,          #
#    but WITHOUT ANY WARRANTY; without even the implied warranty of           #
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            #
#    GNU General Public License for more details.                             #
#                                                                             #
#    You should have received a copy of the GNU General Public License        #
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.    #
#                                                                             #
# --------------------------------------------------------------------------- #

def translate_ru(type, jid, nick, text):
    text = text.strip()
    trlang = {'en':['e',L('English','%s/%s'%(jid,nick))],'ru':['r',L('Russian','%s/%s'%(jid,nick))],'fr':['f',L('French','%s/%s'%(jid,nick))],
              'es':['s',L('Spanish','%s/%s'%(jid,nick))],'it':['i',L('Italian','%s/%s'%(jid,nick))],'de':['g',L('German','%s/%s'%(jid,nick))],
              'pt':['p',L('Portuguese','%s/%s'%(jid,nick))]}
              
    trlang2 = {'e':'en','r':'ru','f':'fr','s':'es','i':'it','g':'de','p':'pt'}
    
    if text.lower() == 'list': msg = L('Available languages for translate:','%s/%s'%(jid,nick)) + ' ' + ', '.join(sorted(trlang.keys()))
    elif text[:5].lower() == 'info ':
        text = text.lower().split(' ')
        msg = ''
        for tmp in text:
            if tmp in trlang: msg += '%s - %s, ' % (tmp,trlang[tmp][1])
        if len(msg): msg = L('Available languages: %s','%s/%s'%(jid,nick)) % msg[:-2]
        else: msg = L('I don\'t know this language','%s/%s'%(jid,nick))
    elif text[:5].lower() == 'lang ' and text.count(' ')==1:
        text = text.lower().split(' ')[1]
        msg = ', '.join(['%s - %s' % (k,trlang[k][1]) for k in trlang.keys() if text in trlang[k][1].lower()])
        if len(msg): msg = L('Available languages: %s','%s/%s'%(jid,nick)) % msg
        else: msg = L('I don\'t know this language','%s/%s'%(jid,nick))
    else:
        if ' ' in text:
            text = text.split(' ',2)
            url = 'http://m.translate.ru/services/MobileService.asmx/TranslateText4Touch?'
            if len(text)>1 and (text[0].lower() in trlang):
                if len(text)>2 and (text[1].lower() in trlang): lfrom,lto,tr_text = text[0].lower(),text[1].lower(),text[2]
                else: lfrom,lto,tr_text = '',text[0].lower(),' '.join(text[1:])
                if lfrom: lft = trlang[lfrom][0]
                else: lft = 'a'
                lft += trlang[lto][0]
                search_results = load_page(url, {'intLang':lto,\
                                                 'text':tr_text.encode("utf-8"),\
                                                 'direction':lft,\
                                                 'template':'General'})
                tr_xml = xmpp.simplexml.XML2Node(search_results)
                isWord = tr_xml.getTagData('isWord') == 'true'
                result = tr_xml.getTagData('result')
                tr_direct = tr_xml.getTagData('ptsDirCode')
                if isWord:
                    result = result.replace('&nbsp;<span class="ref_info"></span>,\n',',')
                    result = result.replace('<span class="ref_dictionary">\n','<span class="ref_dictionary">')
                    result = result.replace('<span class="ref_comment">\n','<span class="ref_comment">')
                    result = result.replace('</span>\n<span class="ref_info">','</span><span class="ref_info">')
                    result = result.replace('<li><span class="ref_result">\n','<li><span class="ref_result">, ')
                    for t in re.findall('(</div>\n.*?<div class="tr_pr">)',result,re.I+re.U+re.S): result = result.replace(t,'</div><div class="tr_pr">')
                    result = result.replace('<span class="ref_source">','||<span class="ref_source">')
                    for t in re.findall('(<a href=.*?</a>)',result,re.I+re.U+re.S): result = result.replace(t,'')
                    for t in re.findall('(<span id=.*?</span>)',result,re.I+re.U+re.S): result = result.replace(t,'')
                    result = result.replace('<br><span class="w_des">','<span class="w_des">')
                    result = result.replace('<b>\n','<b>')
                    msg = urllib.unquote(unhtml(result).encode('utf8')).decode('utf8', 'ignore')
                    msg = msg.replace('||','').replace(')\n(',') (').replace('\n, ',', ').replace(' ,',',').replace(',\n',', ')
                else: msg = result
                if not lfrom:
                    if '\n' in msg: symb = '\n'
                    else: symb = ' '
                    msg = L('%s%s[Source: %s]','%s/%s'%(jid,nick)) % (msg,symb,trlang[trlang2[tr_direct[0]]][1].strip())
            else: msg = L('Incorrect language settings for translate. translate list - available languages.','%s/%s'%(jid,nick))
        else: msg = L('Command\'s format: translate [from] to text','%s/%s'%(jid,nick))
    send_msg(type, jid, nick, msg)

global execute

execute = [(3, 'translate', translate_ru, 2, 'Translator from translate.ru\ntranslate [from_language] to_language text - translate text\ntranslate list - list for available languages for translate\ntranslate info <reduction> - get info about language reduction\ntranslate lang <expression> - get languages by expression')]

