"""
    MoinMoin - ImportHtml action

"""

import mimetypes, string, sys, time, HTMLParser
from MoinMoin import config, user, util, wikiutil, webapi
from MoinMoin.Page import Page
from MoinMoin.PageEditor import PageEditor
from MoinMoin.util import MoinMoinNoFooter

from MoinMoin.HTML2MoinMoin import HTML2MoinMoin
import urllib, cStringIO

#############################################################################
### Create parts of the Web interface
#############################################################################

def show_form(pagename, request):
    request.http_headers()
    wikiutil.send_title(request, "Import HTML as Markup")
    request.write(
"""
<form action="%(baseurl)s/%(pagename)s" method="POST" enctype="multipart/form-d\ata">
<input type="hidden" name="action" value="ImportHtml">
<input type="radio" name="do" value="markup">Show markup<br>
<input type="radio" name="do" value="wiki">Show as wiki page<br>
<input type="radio" name="do" value="import">Append to page<br>
URL: <input type="text" name="url" size="50">
<input type="submit" value="Get">
</form>
""" % {
        'baseurl': request.getBaseURL(),
        'pagename': wikiutil.quoteWikiname(pagename),
        })

    #wikiutil.send_footer(request, pagename, showpage=1)


def get_content(request):
    if request.form.has_key("url"):
        try:
            return urllib.urlopen(request.form["url"][0]).read()
        except IOError:
            return ""
    else:
        return ""

def get_parsed(request):
    p = HTML2MoinMoin()
    p.output = cStringIO.StringIO()
    try:
        p.feed(get_content(request))
        p.close()
    except:
        import traceback
        traceback.print_exc(None, p.output)
    return p.output.getvalue()

def show_markup(pagename, request):
    request.http_headers(["Content-type: text/plain"])
    request.write(get_parsed(request))
    raise MoinMoinNoFooter

def show_as_wiki_page(pagename, request):
    page = Page(pagename)
    page.set_raw_body(get_parsed(request), 1)
    page.send_page(request)

def append_to_page(pagename, request):
    page = PageEditor(pagename, request)
    page.set_raw_body(page.get_raw_body() + get_parsed(request))
    page.sendEditor()

def error_msg(pagename, request, msg):
    Page(pagename).send_page(request, msg=msg)


def execute(pagename, request):
    """ Main dispatcher for the 'ImportHtml' action.
    """
    _ = request.getText

    msg = None
    if not request.form.has_key('do'):
        show_form(pagename, request)
    elif request.form["do"][0] == "markup":
        show_markup(pagename, request)
    elif request.form["do"][0] == "wiki":
        show_as_wiki_page(pagename, request)
    elif request.form["do"][0] == "import":
        append_to_page(pagename, request)
    else:
        msg = _('<b>Unsupported action: %s</b>') % (request.form['do'][0],)
        
    if msg:
        error_msg(pagename, request, msg)
