type Styles = Partial<CSSStyleDeclaration> & {
  [key: string]: any;
};

type DataAttributes = {
  style: Styles;
  classList: string;
};

type SectionListGalleryButton = {
  attributes: DataAttributes;
  text: string;
  link: string;
};

type SectionListGalleryListItem = {
  title: string;
  message: string;
  button: SectionListGalleryButton;
};

type SectionOurTeamListItem = {
  name: string;
  title: string;
  message: string;
};

type SectionGallery = {
  style: "gallery";
  list: SectionListGalleryListItem[];
};

type SectionOurTeam = {
  style: "our-team";
  list: SectionOurTeamListItem[];
};

type SectionClients = {
  style: "clients";
  list: { href: string }[];
};

type SectionListNamed = SectionGallery | SectionOurTeam | SectionClients;

type SectionListNumberIconItem = {
  name: string;
  color: string;
};

type SectionListNumberListItem = {
  title: string;
  message: string;
  list: string[];
} & (
  | {
      icon: SectionListNumberIconItem;
    }
  | {
      image: {
        src: string;
        inverted?: boolean
      };
    }
);

type SectionListNumber = {
  style: number;
  list: SectionListNumberListItem[];
};

type SectionListProperties = {
  tag: string;
  attributes: DataAttributes;
  subtitle: string;
  title: string;
  message: string;
  footer: string;
} & (SectionListNumber | SectionListNamed);

type CompanyData = {
  section_list: SectionListProperties[];
};

type SectionStyleChildren = {
  type: keyof HTMLElementTagNameMap;
  attributes: DataAttributes;
  children: SectionStyleChildren[];
};

type SectionStyle = {
  parent: SectionStyleChildren;
};
