#!/usr/bin/env python

import argparse
from http.client import error
from websearch import WebSearch
from gevent.pywsgi import WSGIServer
from flask import Flask, redirect, request, jsonify


webserver = Flask(__name__)


@webserver.errorhandler(404)
def page_not_found(e):
    return """
        Can't find what you want.
        Please change the query or the extensions
    """


@webserver.route('/v1/<string:ext>/<string:query>')
def old_route(ext, query):
    return redirect(f'/{ext}/{query}', code=301)


@webserver.route('/<string:ext>/<string:query>')
def websearch(ext, query):
    limit = request.args.get('limit', '')
    if limit and limit.isdigit():
        limit = int(limit)
    else:
        limit = 100
    try:
        query = query.replace('+', ' ')
        web = WebSearch(query)
        if ext == 'pages':
            res = WebSearch(query).pages
        elif ext == 'images':
            res = WebSearch(query).images
        else:
            res = web.custom(extension=ext)
    except error as e:
        print(e)
        return "Error 500, Something Wrong", 500

    return jsonify(res[:limit]) \
        if res and type(res) == list else redirect('/404')


parser = argparse.ArgumentParser(
    description='Webserver version for websearch-python'
)
parser.add_argument(
    '--host', help='HOST for server, default: 0.0.0.0', default='0.0.0.0'
)
parser.add_argument(
    '--port', type=int, help='PORT for server. default 7845', default=7845
)
args = parser.parse_args()

print(f'''
_    _   _____   _____   _____   _____    ___    _____   ____    _   _
| |  | | |  ___| | ___ \ /  ___| |  ___|  / _ \  | ___ \ /  __ \ | | | |
| |  | | | |__   | |_/ / \ `--.  | |__   / /_\ \ | |_/ / | /  \/ | |_| |
| |/\| | |  __|  | ___ \  `--. \ |  __|  |  _  | |    /  | |     |  _  |
\  /\  / | |___  | |_/ / /\__/ / | |___  | | | | | |\ \  | \__/\ | | | |
\/  \/  \____/  \____/  \____/  \____/  \_| |_/ \_| \_|  \____/ \_| |_/

Server listening on {args.host}:{args.port}
''')  # noqa: W605

SERVER = WSGIServer((args.host, args.port), webserver)
SERVER.serve_forever()
