
namespace Connected
{
    public class Typography
    {
        public Default Default { get; set; } = new Default();
        public H1 H1 { get; set; } = new H1();
        public H2 H2 { get; set; } = new H2();
        public H3 H3 { get; set; } = new H3();
        public H4 H4 { get; set; } = new H4();
        public H5 H5 { get; set; } = new H5();
        public H6 H6 { get; set; } = new H6();
        public Subtitle1 Subtitle1 { get; set; } = new Subtitle1();
        public Subtitle2 Subtitle2 { get; set; } = new Subtitle2();
        public Body1 Body1 { get; set; } = new Body1();
        public Body2 Body2 { get; set; } = new Body2();
        public Button Button { get; set; } = new Button();
        public Caption Caption { get; set; } = new Caption();
        public Overline Overline { get; set; } = new Overline();
    }

    public class Default : BaseTypography
    { 
        public Default()
        {
            FontFamily = new[] { "Roboto", "Helvetica", "Arial", "sans-serif" };
            FontSize = ".875rem";
            FontWeight = 400;
            LineHeight = 1.43;
            LetterSpacing = ".01071em";
        }
    }
    public class H1 : BaseTypography
    {
        public H1()
        {
            FontSize = "6rem";
            FontWeight = 300;
            LineHeight = 1.167;
            LetterSpacing = "-.01562em";
        }
    }
    public class H2 : BaseTypography
    {
        public H2()
        {
            FontSize = "3.75rem";
            FontWeight = 300;
            LineHeight = 1.2;
            LetterSpacing = "-.00833em";
        }
    }
    public class H3 : BaseTypography
    {
        public H3()
        {
            FontSize = "3rem";
            FontWeight = 400;
            LineHeight = 1.167;
            LetterSpacing = "0";
        }
    }
    public class H4 : BaseTypography
    {
        public H4()
        {
            FontSize = "2.125rem";
            FontWeight = 400;
            LineHeight = 1.235;
            LetterSpacing = ".00735em";
        }
    }
    public class H5 : BaseTypography
    {
        public H5()
        {
            FontSize = "1.5rem";
            FontWeight = 400;
            LineHeight = 1.334;
            LetterSpacing = "0";
        }
    }
    public class H6 : BaseTypography
    {
        public H6()
        {
            FontSize = "1.25rem";
            FontWeight = 500;
            LineHeight = 1.6;
            LetterSpacing = ".0075em";
        }
    }
    public class Subtitle1 : BaseTypography
    {
        public Subtitle1()
        {
            FontSize = "1rem";
            FontWeight = 400;
            LineHeight = 1.75;
            LetterSpacing = ".00938em";
        }
    }
    public class Subtitle2 : BaseTypography
    {
        public Subtitle2()
        {
            FontSize = ".875rem";
            FontWeight = 500;
            LineHeight = 1.57;
            LetterSpacing = ".00714em";
        }
    }
    public class Body1 : BaseTypography
    {
        public Body1()
        {
            FontSize = "1rem";
            FontWeight = 400;
            LineHeight = 1.5;
            LetterSpacing = ".00938em";
        }
    }
    public class Body2 : BaseTypography
    {
        public Body2()
        {
            FontSize = ".875rem";
            FontWeight = 400;
            LineHeight = 1.43;
            LetterSpacing = ".01071em";
        }
    }
    public class Button : BaseTypography
    {
        public Button()
        {
            FontSize = ".875rem";
            FontWeight = 500;
            LineHeight = 1.75;
            LetterSpacing = ".02857em";
            TextTransform = "uppercase";
        }
    }
    public class Caption : BaseTypography
    {
        public Caption()
        {
            FontSize = ".75rem";
            FontWeight = 400;
            LineHeight = 1.66;
            LetterSpacing = ".03333em";
        }
    }
    public class Overline : BaseTypography
    {
        public Overline()
        {
            FontSize = ".75rem";
            FontWeight = 400;
            LineHeight = 2.66;
            LetterSpacing = ".08333em";
        }
    }

    public class BaseTypography
    {
        public string[] FontFamily { get; set; }
        public int FontWeight { get; set; }
        public string FontSize { get; set; }
        public double LineHeight { get; set; }
        public string LetterSpacing { get; set; }
        public string TextTransform { get; set; } = "none";
    }
}
