#!/usr/bin/env python3
"""
    LodgeIt!
    ~~~~~~~~

    A script that pastes stuff into the lodgeit pastebin.
"""
import os
import sys
import argparse
import urllib.parse
import urllib.request

VERSION = '0.3'
SERVER_NAME = 'http://paste.openstack.org/'

def upload_paste(paste_content, title=None, language=None, private=None):
    """
    Uploads a paste to LodgeIt!

    :param paste_content: the content of the paste to upload
    :param title: the title of the paste (optional)
    :param language: the language of the paste (optional)
    :param private: whether the paste should be private (optional)
    :return: the URL of the uploaded paste
    """
    # build the POST data
    data = {
        'content': paste_content.encode('utf-8'),
        'format': 'text',
    }
    if title is not None:
        data['name'] = title
    if language is not None:
        data['language'] = language
    if private is not None:
        data['private'] = private

    # make the request
    url = urllib.parse.urljoin(SERVER_NAME, '/pastes')
    request = urllib.request.Request(url, data=urllib.parse.urlencode(data).encode('utf-8'))
    response = urllib.request.urlopen(request)

    # parse the response and return the URL of the new paste
    location = response.getheader('Location')
    if location is None:
        raise ValueError('Could not find the URL of the new paste')
    return location

def main():
    # parse the command-line arguments
    parser = argparse.ArgumentParser(description='Upload a paste to LodgeIt!')
    parser.add_argument('filename', help='the name of the file to upload')
    parser.add_argument('--title', help='the title of the paste')
    parser.add_argument('--language', help='the language of the paste')
    parser.add_argument('--private', action='store_true', help='make the paste private')
    args = parser.parse_args()

    # read the content of the file to upload
    with open(args.filename, 'r') as f:
        paste_content = f.read()

    # upload the paste and print the URL of the new paste
    url = upload_paste(paste_content, args.title, args.language, args.private)
    print(url)

if __name__ == '__main__':
    main()

