package lambdasub

import (
	"api-section/parsing"
	"context"
	"os"
	"strconv"
	"strings"

	"github.com/aws/aws-lambda-go/events"
)

var Authstr = func() string {
	if v, ok := os.LookupEnv("AUTHSTR"); ok {
		return strings.TrimSpace(v)
	}
	return ""
}()

func Handler(ctx context.Context, request events.APIGatewayV2HTTPRequest) (events.APIGatewayV2HTTPResponse, error) {

	// Read header "Authtoken" (case-insensitive). HTTP API v2 typically provides lowercase keys.
	authTokenstr := request.Headers["Auth"]
	if authTokenstr == "" {
		for k, v := range request.Headers {
			if strings.EqualFold(k, "Auth") {
				authTokenstr = v
				break
			}
		}
	}
	authTokenstr = strings.TrimSpace(authTokenstr)

	// set the number of vulnerabilities
	Vulnumstr := "1"
	Vulnumstr = request.Headers["Vulnum"]
	if Vulnumstr == "" {
		for k, v := range request.Headers {
			if strings.EqualFold(k, "Vulnum") {
				Vulnumstr = v
				break
			}
		}
	}
	Vulnum, err := strconv.Atoi(Vulnumstr)
	if err != nil || Vulnum < 1 {
		Vulnum = 1
	}

	/*

		return events.APIGatewayV2HTTPResponse{
			StatusCode: 200,
			Body:       authTokenstr,
			Headers:    map[string]string{"content-type": "text/plain; charset=utf-8"},
		}, nil
	*/
	var vulnerability string = ""

	if authTokenstr == Authstr {

		if s, err := parsing.RunByCount(Vulnum); err == nil {
			vulnerability = s
		} else {
			vulnerability = "error:" + err.Error()
		}
		return events.APIGatewayV2HTTPResponse{
			StatusCode: 200,
			Body:       vulnerability,
			Headers:    map[string]string{"content-type": "text/plain; charset=utf-8"},
		}, nil

	} else {
		vulnerability = `error:Invalid authentication token`
		return events.APIGatewayV2HTTPResponse{
			StatusCode: 200,
			Body:       vulnerability,
			Headers:    map[string]string{"content-type": "text/plain; charset=utf-8"},
		}, nil
	}

}
