from app import app,db
from flask import render_template,flash,redirect,url_for,request,jsonify,g
from app.forms import PostForm,LoginForm,RegistrationForm,EditProfileForm,EmptyForm,ResetPasswordRequestForm,ResetPasswordForm

from flask_login import current_user,login_user,logout_user,login_required
from app.models import User,Post

from werkzeug.urls import url_parse
from datetime import datetime

from app.email import send_password_reset_email
from flask_babel import _,get_locale

from guess_language import guess_language

from app.translate import translate


@app.before_request
def before_request():
	if current_user.is_authenticated:
		current_user.last_seen = datetime.utcnow()
		db.session.commit()
	g.locale= 'zh' if str(get_locale()).startswith('zh') else str(get_locale())
	

@app.route('/',methods=['GET','POST'])
@app.route('/index',methods=["GET","POST"])
@login_required
def index():
	form=PostForm()
	if form.validate_on_submit():
		language = guess_language(form.post.data)
		if language == 'UNKNOWN' or len(language) > 5:
			language=''
		post = Post(body=form.post.data, author=current_user,language = language)
		db.session.add(post)
		db.session.commit()
		flash(_('Your post is now live!'))
		return redirect(url_for('index'))
	page = request.args.get('page', 1, type=int)
	posts = current_user.followed_posts().paginate(page, app.config['POSTS_PER_PAGE'], False)
	next_url = url_for('index', page=posts.next_num) if posts.has_next else None
	prev_url = url_for('index', page=posts.prev_num) if posts.has_prev else None
	return render_template("index.html",title='Home',form=form,posts=posts.items,next_url=next_url,prev_url=prev_url)

@app.route('/explore')
@login_required
def explore():
	page = request.args.get('page', 1, type=int)
	posts = Post.query.order_by(Post.timestamp.desc()).paginate(page, app.config['POSTS_PER_PAGE'], False)
	next_url = url_for('explore', page=posts.next_num) if posts.has_next else None
	prev_url = url_for('explore', page=posts.prev_num) if posts.has_prev else None
	return render_template('index.html', title='Explore', posts=posts.items,next_url=next_url, prev_url=prev_url)



@app.route('/user/<username>')
@login_required
def user(username):
	user=User.query.filter_by(username=username).first_or_404()
	#posts = [{'author':user, 'body':'Test post #1'},{'author':user, 'body':'Test post #2'}]
	#posts=user.posts.order_by(Post.timestamp.desc()).all()
	page = request.args.get('page', 1, type=int)
	posts = user.posts.order_by(Post.timestamp.desc()).paginate(page, app.config['POSTS_PER_PAGE'], False)
	next_url = url_for('user', username=user.username, page=posts.next_num) if posts.has_next else None
	prev_url = url_for('user', username=user.username, page=posts.prev_num) if posts.has_prev else None
	form=EmptyForm()
	return render_template('user.html', user=user, posts=posts.items,form=form,next_url=next_url, prev_url=prev_url)

@app.route('/edit_profile',methods=['GET','POST'])
@login_required
def edit_profile():
	form = EditProfileForm()
	if form.validate_on_submit():
		current_user.username = form.username.data
		current_user.about_me = form.about_me.data
		db.session.commit()

		flash('Your changes have been saved.')
		return redirect(url_for('edit_profile'))
	elif request.method == 'GET':
		form.username.data = current_user.username
		form.about_me.data = current_user.about_me
	return render_template('edit_profile.html', title='Edit Profile', form=form)

@app.route('/follow/<username>', methods=['POST'])
@login_required
def follow(username):
	form = EmptyForm()
	if form.validate_on_submit():
		user = User.query.filter_by(username=username).first()
		if user is None:
			flash('User {} not found.'.format(username))
			return redirect(url_for('index'))
		if user == current_user:
			flash('You cannot follow yourself!')
			return redirect(url_for('user', username=username))
		current_user.follow(user)
		db.session.commit()
		flash('You are following {}!'.format(username))
		return redirect(url_for('user', username=username))
	else:
		return redirect(url_for('index'))

@app.route('/unfollow/<username>', methods=['POST'])
@login_required
def unfollow(username):
	form = EmptyForm()
	if form.validate_on_submit():
		user = User.query.filter_by(username=username).first()
		if user is None:
			flash('User {} not found.'.format(username))
			return redirect(url_for('index'))
		if user == current_user:
			flash('You cannot unfollow yourself!')
			return redirect(url_for('user', username=username))
		current_user.unfollow(user)
		db.session.commit()
		flash('You are not following {}.'.format(username))
		return redirect(url_for('user', username=username))
	else:
		return redirect(url_for('index'))



@app.route('/translate', methods=['POST'])
@login_required
def translate_text():
	return jsonify({'text': translate(request.form['text'],request.form['source_language'],request.form['dest_language'])})
