# -*- coding: utf-8  -*-
#
# Copyright (C) 2009-2012 Ben Kurtovic <ben.kurtovic@verizon.net>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

from earwigbot.commands import Command

class Langcode(Command):
    """Convert a language code into its name and a list of WMF sites in that
    language."""
    name = "langcode"
    commands = ["langcode", "lang", "language"]

    def process(self, data):
        if not data.args:
            self.reply(data, "Please specify a language code.")
            return

        code = data.args[0]
        site = self.bot.wiki.get_site()
        matrix = site.api_query(action="sitematrix")["sitematrix"]
        del matrix["count"]
        del matrix["specials"]

        for site in matrix.itervalues():
            if site["code"] == code:
                name = site["name"].encode("utf8")
                localname = site["localname"].encode("utf8")
                if name != localname:
                    name += " ({0})".format(localname)
                sites = ", ".join([s["url"] for s in site["site"]])
                msg = "\x0302{0}\x0F is {1} ({2})".format(code, name, sites)
                self.reply(data, msg)
                return

        self.reply(data, "Language \x0302{0}\x0F not found.".format(code))

@@ -1302,13 +1302,38 @@
 uage
+, or a name into its code
 .%22%22%22%0A
-
     
@@ -1550,16 +1550,23 @@
     code
+, lcase
  = data.
@@ -1572,16 +1572,38 @@
 .args%5B0%5D
+, data.args%5B0%5D.lower()
 %0A       
@@ -1807,49 +1807,8 @@
 ():%0A
-            if site%5B%22code%22%5D == code:%0A    
     
@@ -1862,20 +1862,16 @@
         
- 
-   
 localnam
@@ -1899,32 +1899,70 @@
 .encode(%22utf8%22)%0A
+            if site%5B%22code%22%5D == lcase:%0A
                 
@@ -2183,16 +2183,16 @@
  sites)%0A
-
         
@@ -2235,32 +2235,316 @@
           return
+%0A            elif name.lower() == lcase or localname.lower() == lcase:%0A                sites = %22, %22.join(%5Bs%5B%22url%22%5D for s in site%5B%22site%22%5D%5D)%0A                msg = %22%5Cx0302%7B0%7D%5Cx0F is %7B1%7D (%7B2%7D)%22%0A                self.reply(data, msg.format(code, site%5B%22code%22%5D, sites))%0A                return
 %0A%0A        self.r

Support reverse lookups as well.