#!/usr/bin/python
#
# Copyright 2008 Dan Smith <dsmith@danplanet.com>
#
# 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/>.

import os

from chirp import elib_intl
from chirp import platform, CHIRP_VERSION
from chirpui import config

# Hack to setup environment
platform.get_platform()

import sys
import os
import locale
import gettext

p = platform.get_platform()
if hasattr(sys, "frozen"):
    log = file(p.config_file("debug.log"), "w", 0)
    sys.stderr = log
    sys.stdout = log
elif not os.isatty(0):
    log = file(p.config_file("debug.log"), "w", 0)
    sys.stdout = log
    sys.stderr = log

print "CHIRP %s on %s (Python %s)" % (CHIRP_VERSION,
                                      platform.get_platform().os_version_string(),
                                      sys.version.split()[0])

execpath = platform.get_platform().executable_path()
localepath = os.path.abspath(os.path.join(execpath, "locale"))
if not os.path.exists(localepath):
    localepath = "/usr/share/chirp/locale"

conf = config.get()
manual_language = conf.get("language", "state")
langs = []
if manual_language and manual_language != "Auto":
    lang_codes = { "English"         : "en_US",
                   "Polish"          : "pl",
                   "Italian"         : "it",
                   "Dutch"           : "nl",
                   "German"          : "de",
                   "Hungarian"       : "hu",
                   "Russian"         : "ru",
                   "Portuguese (BR)" : "pt_BR",
                   }
    try:
        print lang_codes[manual_language]
        langs = [lang_codes[manual_language]]
    except KeyError:
        print "Unsupported language `%s'" % manual_language
else:
    lc, encoding = locale.getdefaultlocale()
    if (lc):
	langs = [lc]
    try:
        langs += os.getenv("LANG").split(":")
    except:
        pass

try:
    if os.name == "nt":
        elib_intl._putenv("LANG", langs[0])
    else:
        os.putenv("LANG", langs[0])
except IndexError:
    pass
path = "locale"
gettext.bindtextdomain("CHIRP", localepath)
gettext.textdomain("CHIRP")
lang = gettext.translation("CHIRP", localepath, languages=langs,
                           fallback=True)

import gtk

# Python <2.6 does not have str.format(), which chirp uses to make translation
# strings nicer. So, instead of installing the gettext standard "_()" function,
# we can install our own, which returns a string of the following class,
# which emulates the new behavior, thus allowing us to run on older Python
# versions.
class CompatStr(str):
    def format(self, **kwargs):
        base = lang.gettext(self)
        for k,v in kwargs.items():
            base = base.replace("{%s}" % k, str(v))
        return base

pyver = sys.version.split()[0]

try :
    vmaj, vmin, vrel = pyver.split(".", 3)
except :
    vmaj, vmin = pyver.split(".", 2)
    vrel = 0

if int(vmaj) < 2 or int(vmin) < 6:
    # Python <2.6, emulate str.format()
    import __builtin__
    def lang_with_format(string):
        return CompatStr(string)
    __builtin__._ = lang_with_format
else:
    # Python >=2.6, use normal gettext behavior
    lang.install()

from chirp import *
from chirpui import mainapp, config

a = mainapp.ChirpMain()

profile = False
if len(sys.argv) > 1:
    arg = sys.argv[1]
    index = 2
    if arg == "--profile":
        profile = True
    elif arg == "--help":
        print "Usage: %s [file...]" % sys.argv[0]
        sys.exit(0)
    else:
        index = 1
else:
    index = 1

for i in sys.argv[index:]:
    print "Opening %s" % i
    a.do_open(i)

a.show()

if profile:
    import cProfile, pstats
    cProfile.run("gtk.main()", "chirpw.stats")
    p = pstats.Stats("chirpw.stats")
    p.sort_stats("cumulative").print_stats(10)
else:
    gtk.main()

if config._CONFIG:
    config._CONFIG.set("last_dir",
                       platform.get_platform().get_last_dir(),
                       "state")
    config._CONFIG.save()
