<?php 

namespace app\controllers; 

use li3_swiftmailer\mailer\Transports;
use li3_swiftmailer\mailer\Message;
use app\models\User;
use app\models\confirmKey;

class SignupController extends \lithium\action\Controller {
	public $publicActions = array('index','confirm', 'cancel' );
	public $secret = "marshmallows"; //I don't know why either?

	public function index() {
		$user = null;
		//If the request isn't empty
		if($this->request->data) 
		{
			//Create a user from the data
			$user = User::Create($this->request->data);	

			//The user isn't active until after they confirm.
			$user->confirmed = false;
			$user->active = false; 
			$user->joinedon = date('Y-m-d H:i:s', time());
			$user->level = "user";

			//By default save does validation at the same time, 
			//If there are errors its stuffs them into the $user->_erorrs variable,
			//Accessible from $user->errors(), this is automatically passed to the view.
			if ($user->save()) 
			{
				//Generate a confirmation key for the user
				$key = confirmKey::Create(array('key' => confirmKey::generate($user->email), 'username' => $user->username));
				
				//Save it to the database 
				$key->save();
				$link = "/signup/confirm/$key->key";

				return compact('key', 'link', 'user');
			}
		}
		//If there are validation errors, send them back to the form
		return compact('user');
	}

	public function confirm($key = null) {
		//Situation one
		//They have a key
		if (!(empty($key)))
		{
			//Find the key in the database
			$foundKey = confirmKey::find('first', array('conditions' => compact('key')));
			
			//If the key exists
			if($foundKey)
			{
				//Find that user in the database
				$foundUser = User::find('first', array('conditions' => array("username" => $foundKey->username)));
				$valid = ($foundUser != NULL);

				//Set the users account active and confirmed.
				$foundUser->confirmed = true;
				$foundUser->active = true;	

				//If the user is saved sucsessfully,
				if($foundUser->save(null, array('validate' => false)))
				{
					/* If the save is sucsessful we are done */
					//Delete their key,
					$foundKey->delete();

					//Send them to the homepage (probably login though)
					$this->redirect("/");

				}
				else
				{
					FlashMessage::set("There was an error.");
				}

			}
			else
			{
				//Otherwise
				FlashMessage::set("There was an error finding the key.");
				return;
			}
		}
	}

	public function cancel($key = null) {
		$thisKey = Key::find('first', array('conditions' => compact('key')));
		
		//If the key exists
		if ($thisKey) 
		{
			$user = User::find('first', array('conditions' => array('username' => $thisKey->username)));

			$user->delete();
			$thisKey->delete();
		}
		return; 
	}
}