% ------------------------------------------------------------------------------
% Copyright (c) 2019, 2025 Contributors to the Eclipse Foundation
%
% See the NOTICE file(s) distributed with this work for additional
% information regarding copyright ownership.
%
% This program and the accompanying materials are made available under the terms
% of the MIT License which is available at https://opensource.org/licenses/MIT
%
% SPDX-License-Identifier: MIT
% ------------------------------------------------------------------------------
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, arrows, automata, calc, positioning, shapes, shapes.misc}
\usepackage[paperwidth=40in, paperheight=20in]{geometry}

\begin{document}
\pagestyle{empty}

\begin{tikzpicture}[
    auto,
    ->,
    node distance=4cm,
    every state/.style={ellipse, semithick, fill=black!5, minimum size=1.5cm, font=\Large},
    initial distance=1.2cm,
    every initial by arrow/.style={-{Stealth[scale=1.4]}},
    initial text=,
    transform shape,
    double distance=2pt,
    every loop/.style={min distance=10mm}
]

\node[state, initial, accepting] (A) {\emph{A, 1}};
\node[state, right=3.0cm of A]   (B) {\emph{B, 2}};
\node[state, right=3.0cm of B]   (C) {\emph{C, 3}};
\node[state, below=2.5cm of A]   (I) {\emph{A, 3}};
\node[state, below=2.5cm of B]   (J) {\emph{B, 3}};
\node[state, below=1.5cm of I]   (E) {\emph{D, 3}};
\node[state, below=1.5cm of J]   (H) {\emph{E, 1}};
\node[state, right=3.0cm of H]   (G) {\emph{F, 2}};

\path[-{Stealth[scale=1.4]}]
    (B) edge[loop above, dashed]            node[align=center] {\textit{push\_start}}                                       (B)
    (A) edge[loop above, dashed]            node[align=center] {\textit{push\_stop}}                                        (A)
    (I) edge[loop above, dashed, red]       node[align=center] {\textit{push\_stop}}                                        (I)
    (J) edge[loop above, dashed]            node[align=center] {\textit{push\_start}}                                       (J)
    (C) edge[loop above, dashed]            node[align=center] {\textit{push\_start}\\\textit{\textcolor{red}{push\_stop}}} (C)
    (E) edge[loop below, dashed]            node[align=center] {\textit{\textcolor{red}{push\_stop}}\\\textit{push\_start}} (E)
    (H) edge[loop below, dashed]            node[align=center] {\textit{push\_stop}}                                        (H)
    (G) edge[loop below, dashed]            node[align=center] {\textit{push\_start}}                                       (G)
    (A) edge[bend left, above, dashed]      node[align=center] {\textit{push\_start}}                                       (B)
    (B) edge[bend left, below, dashed]      node[align=center] {\textit{push\_stop}}                                        (A)
    (I) edge[bend left, above, dashed]      node[align=center] {\textit{push\_start}}                                       (J)
    (J) edge[bend left, below, dashed, red] node[align=center] {\textit{push\_stop}}                                        (I)
    (H) edge[bend left, above, dashed]      node[align=center] {\textit{push\_start}}                                       (G)
    (G) edge[bend left, below, dashed]      node[align=center] {\textit{push\_stop}}                                        (H)
    (B) edge[above]                         node[align=center] {\textit{start\_machine}}                                    (C)
    (H) edge[above]                         node[align=center] {\textit{stop\_machine}}                                     (E)
    (E) edge[left, dashed]                  node[align=center] {\textit{turn\_off}}                                         (I)
    (C) edge[left, dashed]                  node[align=center] {\textit{turn\_on}}                                          (G)
;

\end{tikzpicture}
\end{document}
