%% @author author <author@example.com>
%% @copyright YYYY author.

%% @doc Web server for myapp.

-module(myapp_web).
-author('author <author@example.com>').

-export([start/1, stop/0, loop/2]).

%% External API

start(Options) ->
    {DocRoot, Options1} = get_option(docroot, Options),
    Loop = fun (Req) ->
                   ?MODULE:loop(Req, DocRoot)
           end,
    mochiweb_http:start([{name, ?MODULE}, {loop, Loop} | Options1]).

stop() ->
    mochiweb_http:stop(?MODULE).

loop(Req, DocRoot) ->
    "/" ++ Path = Req:get(path),
    case Req:get(method) of
        Method when Method =:= 'GET'; Method =:= 'HEAD' ->
            case Path of
		"captcha" ->
			{CodeHex, BinPng} =  mycaptcha:new(),
						
			Cookie = mochiweb_cookies:cookie("cap", CodeHex, []),

			Req:ok({"image/png", [Cookie], [BinPng]});

                _ ->
                    Req:serve_file(Path, DocRoot)
            end;
        'POST' ->
            case Path of
		"captcha" ->
			CodeHex = Req:get_cookie_value("cap"),
			DataIn = Req:parse_post(),
			CapCode = proplists:get_value("capCode", DataIn),
								
			case mycaptcha:check(CodeHex, CapCode) of
				true ->
					%% a cool one
					Req:ok({"text/html", [], ["<h1>Cool!</h1>"]});
				false ->
					%% redirection
					Req:respond({302, [{"Location", "/"}, {"Content-Type", "text/html; charset=UTF-8"}],""})
			end;


                _ ->
                    Req:not_found()
            end;
        _ ->
            Req:respond({501, [], []})
    end.

%% Internal API

get_option(Option, Options) ->
    {proplists:get_value(Option, Options), proplists:delete(Option, Options)}.
