try {
    require.resolve('aws-sdk');
    require.resolve('hapi');
} catch(e) {
    console.error('Unmet dependencies, please run:', 'npm install aws-sdk hapi');
    process.exit(e.code);
}

var Hapi = require('hapi'),
    server = new Hapi.Server(),
    AWS = {{#if aws.require}}{{{aws.require}}}{{else}}require('aws-sdk'){{/if}};

AWS.config.update({
    region: '{{aws.region}}',
{{#unless aws.profile}}
    {{#if aws.accessKeyId}}accessKeyId: '{{aws.accessKeyId}}',{{/if}}
    {{#if aws.secretAccessKey}}secretAccessKey: '{{aws.secretAccessKey}}',{{/if}}
{{/unless}}
});

{{#if aws.profile}}AWS.config.credentials = new AWS.SharedIniFileCredentials({
    profile: '{{aws.profile}}'
});

{{/if}}
server.connection({
    host: '{{local.host}}',
    port: {{local.port}},
    routes: {
        cors: true
        // cors: {
        //     origin: ['*'],
        //     methods: ['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
        //     exposedHeaders: ['authorization']
        // }
    }
});

{{#each methods}}
{{#if x-lambda.handler}}
(function () {
    if ('{{method}}'.toLowerCase() === 'head') {
        return;
    }

    var endpoint = require('{{x-lambda.handler}}');

    server.route({
        method: '{{method}}',
        path: '{{path}}',
        handler: function (request, reply) {
            var context = {
                    getRemainingTimeInMillis: function() { return 100000000; },
                    done: reply,
                    succeed: function(data) {
                        return reply(null, data);
                    },
                    fail: function(err) {
                        return reply(err);
                    }
                },
                request = {
                    headers: request.headers,
                    payload: request.payload,
                    params: request.params,
                    query: request.query
                };

            setTimeout(function() {
                endpoint.handler(request, context);
            }, 500);
        }
    });
}());

{{/if}}
{{/each}}
server.start(function (err) {
    if (err) throw err;
    console.log('Server running at:', server.info.uri);
});
