using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;

return await Deployment.RunAsync(() => 
{
    // Create a new security group for port 80.
    var securityGroup = new Aws.Ec2.SecurityGroup("securityGroup", new()
    {
        Ingress = new[]
        {
            new Aws.Ec2.Inputs.SecurityGroupIngressArgs
            {
                Protocol = "tcp",
                FromPort = 0,
                ToPort = 0,
                CidrBlocks = new[]
                {
                    "0.0.0.0/0",
                },
            },
        },
    });

    // Get the ID for the latest Amazon Linux AMI.
    var ami = Aws.GetAmi.Invoke(new()
    {
        Filters = new[]
        {
            new Aws.Inputs.GetAmiFilterInputArgs
            {
                Name = "name",
                Values = new[]
                {
                    "amzn-ami-hvm-*-x86_64-ebs",
                },
            },
        },
        Owners = new[]
        {
            "137112412989",
        },
        MostRecent = true,
    });

    // Create a simple web server using the startup script for the instance.
    var server = new Aws.Ec2.Instance("server", new()
    {
        Tags = 
        {
            { "Name", "web-server-www" },
        },
        InstanceType = Aws.Ec2.InstanceType.T2_Micro,
        SecurityGroups = new[]
        {
            securityGroup.Name,
        },
        Ami = ami.Apply(getAmiResult => getAmiResult.Id),
        UserData = @"#!/bin/bash
echo ""Hello, World!"" > index.html
nohup python -m SimpleHTTPServer 80 &
",
    });

    return new Dictionary<string, object?>
    {
        ["publicIp"] = server.PublicIp,
        ["publicHostName"] = server.PublicDns,
    };
});