from django.conf import settings
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.template import RequestContext, Context
from django.shortcuts import render_to_response
from django.utils import translation
from django.newforms import *
from ghestalt.i18n.utils import *

class I18NForm(Form):
    language = ChoiceField(choices=settings.LANGUAGES)
    location = ChoiceField(choices=settings.LOCATIONS)
    nexturl = CharField(max_length=100,widget=HiddenInput)
    def clean(self):
        return self.clean_data
    
def i18n_chooselang(request):
    if request.method == 'POST':
        form = I18NForm(request.POST)
        if form.is_valid():
            try:
                if request.session['django_language'] != settings.LANGUAGE_CODE[:2]:
                    request.session['other_lang'] = request.session['django_language']
            except KeyError:
                pass
            request.session['django_language'] = form.clean_data.get('language')
            request.session['django_location'] = form.clean_data.get('location')
#            assert False, form.clean_data
            redirect_to = '/intl/'+str(form.clean_data.get('language'))+i18n_noprefix(str(form.clean_data.get('nexturl')))
            return HttpResponseRedirect(redirect_to)
        else:
            return render_to_response('chooselang.html',{'form':form,'title':'chooselang'},
                                      RequestContext(request))
    else:
        if request.method=='GET' and request.GET.has_key('next'):
            redirect_to = request.GET['next']
        else:
            redirect_to = '/'
        form = I18NForm({'language':request.LANGUAGE_CODE[:2],'location':request.session.get('django_location','unset'),'nexturl':redirect_to})
        return render_to_response('chooselang.html',{'form':form,'title':'chooselang'},
                                  RequestContext(request))

def i18ninfo(request, language=None):
    if language:
        translation.activate(language)
    else:
        language = 'none'
    txt = _("Hello world")
    txt += ' '+request.LANGUAGE_CODE
    txt += ' '+str(settings.LANGUAGES_BIDI)
    txt += ' '+str(settings.LANGUAGES)
    txt += ' '+language
    return HttpResponse(txt)

def redirectroot(request):
    if request.LANGUAGE_CODE[:2] != settings.LANGUAGE_CODE[:2]:
        if not request.path.startswith('/intl/'):
            return HttpResponseRedirect(i18n_site_base(request)+'/')
        else:
            try:
                if request.session['django_language'] != request.LANGUAGE_CODE[:2]:
                    request.session['django_language'] = request.LANGUAGE_CODE[:2]
            except KeyError:
                pass
    else:
        if request.path.startswith('/intl/'):
            try:
                if request.session['django_language'] != request.LANGUAGE_CODE[:2]:
                    request.session['django_language'] = request.LANGUAGE_CODE[:2]
                    # get rid of pesky /intl/xx when xx is the base language
            except KeyError:
                pass
            return HttpResponseRedirect(i18n_site_base(request)+'/')
    return render_to_response('intro.html',
                              RequestContext(request))
