namespace Website.Data;

public static class WorkExperience
{
    public static Data Get()
    {
        return new Data
        {
            Experiences =
            [
                new Experience
                {
                    Role = "Server Developer",
                    Location = "TotalETO, Company providing engineering to order solutions",
                    DateRange = "2021 - 2026",
                    Points =
                    [
                        new Point
                        {
                            Description =
                                "Wrote various API calls, unit tests to test said calls, and exact examples to show the frontend team on how to consume the GraphQL API.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Converted SQL stored procedures into views usable by Entity Framework to support old functionality with new web app features.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Moved from backend to frontend as needed to fix bugs and add features to React frontend to help the UI team with their higher workload.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Took part in converting legacy VB-coded app functionality to a C# web development server.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Taken the initiative in creating a variety of onboarding internal wiki documents explaining parts of the codebase that were well-loved by the team.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Taken the initiative in creating a variety of onboarding internal wiki documents explaining parts of the codebase that were well-loved by the team.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description = "Created an Azure DevOps pipeline to automate taking snapshots of the database schema to be aware of changes from multiple teams altering the database.",
                            IsVisible = true
                        }
                    ]
                },
                new Experience
                {
                    Role = "Fullstack Blazor Developer",
                    Location = "Personal Projects, on various interests",
                    DateRange = "2021, 2026",
                    Points =
                    [
                        new Point
                        {
                            Description =
                                "Creating and updating existing web apps with AI agent development practices for faster prototyping, development, quality assurance, and deployment.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Created igpfanreference.ca to teach players in unreleased game basic play patterns, and to experiment with Blazor, Linux self-hosting and Azure web hosting.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Twitch streamed live coding sessions to demonstrate developing the website, and crowd-sourced and credited players on ideas and functionality for the website.",
                            IsVisible = true
                        }
                    ]
                },
                new Experience
                {
                    Role = "Angular Web Developer",
                    Location = "CleanCode, Software consultancy on various projects",
                    DateRange = "2020 - 2021",
                    Points =
                    [
                        new Point
                        {
                            Description =
                                "Came to the conclusion that I wanted to focus my career in .NET, and left the company to pursue Blazor research and C# opportunities. Unfortunately, Blazor development work is not as popular as one would hope.",
                            IsVisible = true
                        }
                    ]
                },

                new Experience
                {
                    Role = "Full Stack Developer",
                    Location = "bitHeads, Tech shop with a focus on cloud-based technology",
                    DateRange = "2015 - 2020",
                    Points =
                    [
                        new Point
                        {
                            Description =
                                "Worked on a portal and mobile-facing web app for a SaaS project written in React.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Eliminated routine project hours spent documenting by creating a Node.js tool in TypeScript that generated the API doc contents.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Created brainCloud’s Command Line tool in Node.js and other test tools, for developers and QA to test and stress test API and server features.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Maintained customer success and brainCloud’s unit tests, examples, and libraries in Java, ObjC, C++, C#, JS, Unity, and Unreal.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Wrote documentation, tutorials, and offered guidance to bring new co-workers up to speed on the BaaS environment.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Maintained and wrote Jenkins Pipeline in Groovy for improved test reporting and team CI.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Developed Test Automation for brainCloud and Nortec/Condair Help websites in Java, to reduce manual testing time spent on an agile team.",
                            IsVisible = true
                        }
                    ]
                },
                new Experience
                {
                    Role = "Mobile Game Developer",
                    Location = "Smoke Labs,  Tech startup with a focus on mobile games",
                    DateRange = "2012 - 2015",
                    Points =
                    [
                        new Point
                        {
                            Description =
                                "Developed key systems in Blokus, Mattel-branded title nominated in the Canadian Video Game Awards for 'Best Game Design' and 'Best Social or Casual Game.'",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Experience integrating a multitude of analytics, ad systems, and backends, including Google Analytics, Game Analytics, Flurry, Mopub, and Playhaven.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Spent time working with the external QA team to bridge the company's knowledge gaps between the developer and QA workflows.",
                            IsVisible = true
                        },
                        new Point
                        {
                            Description =
                                "Integrated ads, in-app purchases, analytics, and handled product releases of legacy client apps.",
                            IsVisible = true
                        }
                    ]
                }
            ]
        };
    }

    public class Data
    {
        public List<Experience> Experiences = new();
    }

    public class Experience
    {
        public string Role { get; set; }
        public string Location { get; set; }
        public string DateRange { get; set; }

        public List<Point> Points { get; set; }
    }

    public class Point
    {
        public string Description { get; set; }
        public bool IsVisible { get; set; }
    }
}