import webapp2
import re

USER_RE = re.compile(r"^[a-zA-Z0-9_-]{3,20}$")
pass_re = re.compile(r"^.{3,20}$")
email_re = re.compile(r"^[\S]+@[\S]+\.[\S]+$")

form="""
	<form method="post">
		<table>
			<label>
				Username :
				<input type="text" name="username" value="%(username)s">
				<font color="red">%(error_username)s</font>
			</label>
			<br>
			<label>
				Password :
				<input type="password" name="password">
				<font color="red">%(error_password)s</font>
			</label>
			<br>
			<label>	
			Verify Password :
			<input type="password" name="verify">
			<font color="red">%(match_error)s</font>
			</label>
			<br>
			<label>
				Email(optional) :
				<input type="text" name="email" value="%(email)s"> 
				<font color="red">%(email_error)s</font>
			<label>
			<br>
		</table>
		<input type="submit">
	</form>
"""

class MainHandler(webapp2.RequestHandler):
	def get(self):
		self.write_form()

	def write_form(self,user="",error_user="",error_pass="",error_verify="",mail="",error_mail=""):
		self.response.out.write(form%{"username":user,
									  "error_username":error_user,
									  "error_password":error_pass,
									  "match_error":error_verify,
									  "email":mail,
									  "email_error":error_mail})


	def valid_username(self,user):
		return USER_RE.match(user)

	def valid_password(self,password):
		return pass_re.match(password)

	def valid_email(self,mail):
		if not mail:
			return True
		else:
			return email_re.match(mail)

	def match(self,p,v):
		if p==v :
			return True
		return False

	def post(self):
		user=self.request.get('username')
		pas=self.request.get('password')
		veri=self.request.get('verify')
		mail=self.request.get('email')
		username=self.valid_username(user)
		password=self.valid_password(pas)
		verify=self.match(veri,pas)
		email=self.valid_email(mail)
		if not username :
			error_user="That's not a valid username."
		else:
			error_user=""
		if not password :
			error_pass="That wasn't a valid password."
		else:
			error_pass=""
		if password and not verify:
			error_verify="Your passwords didn't match."
		else:
			error_verify=""
		if not email:
			error_mail="That's not a valid email."
		else:
			error_mail=""

		if not(username) or not(email) or not(password) or not(verify):
			self.write_form(user,error_user,error_pass,error_verify,mail,error_mail)
		else:
			self.redirect('/welcome')

class welcomeHandler(webapp2.RequestHandler):
	def get(self):
		username=self.request.get('username')
		self.response.out.write("Welcome "+username)

app = webapp2.WSGIApplication([
	('/', MainHandler),('/welcome',welcomeHandler)], debug=True)
