from flask import Flask, request, render_template, redirect
from bases import Bases
import pymysql

bases = Bases()
host = 'http://127.0.0.1:5000/'

try:
    connection = pymysql.connect(host='localhost',
                                 port=3306,
                                 user='root',
                                 password='root',
                                 db='test',
                                 charset='utf8')
except pymysql.Error:
    raise 

cursor = connection.cursor()


app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/gen_short_url', methods=['POST'])
def gen_short_url():
    long_url = request.form.get('long-url')
    try:
        cursor.execute("INSERT INTO urls (url) VALUES ('{}')".format(long_url))
        connection.commit()
    except pymysql.Error:
        raise
    # 获取自增id
    last_id = cursor.lastrowid
    encode = bases.toBase62(last_id)
    short_url = host + encode
    return render_template('index.html', short_url=short_url)


@app.route('/<encode_url>')
def redirect_url(encode_url):
    id = bases.fromBase62(encode_url)
    try:
        cursor.execute("SELECT URL FROM urls WHERE id = " + str(id))
        connection.commit()
        url = cursor.fetchone()
        return redirect(location=url[0])
    except pymysql.Error as e:
        print(str(e))

if __name__ == '__main__':
    app.run(debug=True)