<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"
                  xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
                  xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
                  xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
                  xmlns:camunda="http://camunda.org/schema/1.0/bpmn"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  id="Definitions_Classroom"
                  targetNamespace="http://breakpilot.de/bpmn/classroom">

  <bpmn:process id="ClassroomLessonProcess" name="Unterrichtsstunde" isExecutable="true">

    <!-- Start Event -->
    <bpmn:startEvent id="start" name="Stunde beginnen">
      <bpmn:outgoing>flow_to_einstieg</bpmn:outgoing>
    </bpmn:startEvent>

    <!-- Phase 1: Einstieg -->
    <bpmn:userTask id="phase_einstieg" name="Einstiegsphase" camunda:assignee="${teacherId}">
      <bpmn:extensionElements>
        <camunda:formData>
          <camunda:formField id="duration" label="Dauer (Minuten)" type="long" defaultValue="10" />
          <camunda:formField id="activity" label="Aktivitaet" type="string" />
        </camunda:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>flow_to_einstieg</bpmn:incoming>
      <bpmn:outgoing>flow_to_erarbeitung1</bpmn:outgoing>
    </bpmn:userTask>

    <!-- Service Task: Content-Vorschlaege Einstieg -->
    <bpmn:serviceTask id="suggest_einstieg" name="Content-Vorschlaege" camunda:delegateExpression="${contentSuggestionDelegate}">
      <bpmn:incoming>flow_suggest_einstieg</bpmn:incoming>
      <bpmn:outgoing>flow_from_suggest_einstieg</bpmn:outgoing>
    </bpmn:serviceTask>

    <!-- Phase 2: Erarbeitung I -->
    <bpmn:userTask id="phase_erarbeitung1" name="Erarbeitung I" camunda:assignee="${teacherId}">
      <bpmn:extensionElements>
        <camunda:formData>
          <camunda:formField id="duration" label="Dauer (Minuten)" type="long" defaultValue="15" />
          <camunda:formField id="sozialform" label="Sozialform" type="enum">
            <camunda:value id="einzelarbeit" name="Einzelarbeit" />
            <camunda:value id="partnerarbeit" name="Partnerarbeit" />
            <camunda:value id="gruppenarbeit" name="Gruppenarbeit" />
          </camunda:formField>
          <camunda:formField id="content" label="Lerneinheit" type="string" />
        </camunda:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>flow_to_erarbeitung1</bpmn:incoming>
      <bpmn:outgoing>flow_to_erarbeitung_gateway</bpmn:outgoing>
    </bpmn:userTask>

    <!-- Gateway: Weitere Erarbeitung? -->
    <bpmn:exclusiveGateway id="erarbeitung_gateway" name="Weitere Erarbeitung?">
      <bpmn:incoming>flow_to_erarbeitung_gateway</bpmn:incoming>
      <bpmn:outgoing>flow_to_erarbeitung2</bpmn:outgoing>
      <bpmn:outgoing>flow_to_sicherung</bpmn:outgoing>
    </bpmn:exclusiveGateway>

    <!-- Phase 2b: Erarbeitung II (optional) -->
    <bpmn:userTask id="phase_erarbeitung2" name="Erarbeitung II" camunda:assignee="${teacherId}">
      <bpmn:incoming>flow_to_erarbeitung2</bpmn:incoming>
      <bpmn:outgoing>flow_from_erarbeitung2</bpmn:outgoing>
    </bpmn:userTask>

    <!-- Phase 3: Sicherung -->
    <bpmn:userTask id="phase_sicherung" name="Sicherungsphase" camunda:assignee="${teacherId}">
      <bpmn:extensionElements>
        <camunda:formData>
          <camunda:formField id="duration" label="Dauer (Minuten)" type="long" defaultValue="10" />
          <camunda:formField id="method" label="Methode" type="enum">
            <camunda:value id="tafel" name="Tafelanschrieb" />
            <camunda:value id="digital" name="Digitale Zusammenfassung" />
            <camunda:value id="schueler" name="Schueler-Praesentation" />
          </camunda:formField>
        </camunda:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>flow_to_sicherung</bpmn:incoming>
      <bpmn:incoming>flow_from_erarbeitung2</bpmn:incoming>
      <bpmn:outgoing>flow_to_transfer</bpmn:outgoing>
    </bpmn:userTask>

    <!-- Phase 4: Transfer -->
    <bpmn:userTask id="phase_transfer" name="Transferphase" camunda:assignee="${teacherId}">
      <bpmn:extensionElements>
        <camunda:formData>
          <camunda:formField id="duration" label="Dauer (Minuten)" type="long" defaultValue="8" />
          <camunda:formField id="aufgabe" label="Transfer-Aufgabe" type="string" />
        </camunda:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>flow_to_transfer</bpmn:incoming>
      <bpmn:outgoing>flow_to_reflexion</bpmn:outgoing>
    </bpmn:userTask>

    <!-- Phase 5: Reflexion -->
    <bpmn:userTask id="phase_reflexion" name="Reflexion &amp; Abschluss" camunda:assignee="${teacherId}">
      <bpmn:extensionElements>
        <camunda:formData>
          <camunda:formField id="duration" label="Dauer (Minuten)" type="long" defaultValue="5" />
          <camunda:formField id="hausaufgabe" label="Hausaufgabe" type="string" />
          <camunda:formField id="notizen" label="Stundennotizen" type="string" />
        </camunda:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>flow_to_reflexion</bpmn:incoming>
      <bpmn:outgoing>flow_to_protokoll</bpmn:outgoing>
    </bpmn:userTask>

    <!-- Service Task: Stundenprotokoll -->
    <bpmn:serviceTask id="create_protokoll" name="Stundenprotokoll erstellen" camunda:delegateExpression="${lessonProtocolDelegate}">
      <bpmn:incoming>flow_to_protokoll</bpmn:incoming>
      <bpmn:outgoing>flow_to_end</bpmn:outgoing>
    </bpmn:serviceTask>

    <!-- End Event -->
    <bpmn:endEvent id="end" name="Stunde beendet">
      <bpmn:incoming>flow_to_end</bpmn:incoming>
    </bpmn:endEvent>

    <!-- Boundary Timer Events -->
    <bpmn:boundaryEvent id="timer_einstieg" attachedToRef="phase_einstieg" cancelActivity="false">
      <bpmn:timerEventDefinition>
        <bpmn:timeDuration>PT${einstiegDuration}M</bpmn:timeDuration>
      </bpmn:timerEventDefinition>
      <bpmn:outgoing>flow_timer_warning</bpmn:outgoing>
    </bpmn:boundaryEvent>

    <!-- Sequence Flows -->
    <bpmn:sequenceFlow id="flow_to_einstieg" sourceRef="start" targetRef="phase_einstieg" />
    <bpmn:sequenceFlow id="flow_to_erarbeitung1" sourceRef="phase_einstieg" targetRef="phase_erarbeitung1" />
    <bpmn:sequenceFlow id="flow_to_erarbeitung_gateway" sourceRef="phase_erarbeitung1" targetRef="erarbeitung_gateway" />
    <bpmn:sequenceFlow id="flow_to_erarbeitung2" sourceRef="erarbeitung_gateway" targetRef="phase_erarbeitung2">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${needsMoreWork == true}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="flow_to_sicherung" sourceRef="erarbeitung_gateway" targetRef="phase_sicherung">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${needsMoreWork == false}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="flow_from_erarbeitung2" sourceRef="phase_erarbeitung2" targetRef="phase_sicherung" />
    <bpmn:sequenceFlow id="flow_to_transfer" sourceRef="phase_sicherung" targetRef="phase_transfer" />
    <bpmn:sequenceFlow id="flow_to_reflexion" sourceRef="phase_transfer" targetRef="phase_reflexion" />
    <bpmn:sequenceFlow id="flow_to_protokoll" sourceRef="phase_reflexion" targetRef="create_protokoll" />
    <bpmn:sequenceFlow id="flow_to_end" sourceRef="create_protokoll" targetRef="end" />

  </bpmn:process>

  <!-- BPMN Diagram -->
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="ClassroomLessonProcess">
      <bpmndi:BPMNShape id="start_di" bpmnElement="start">
        <dc:Bounds x="152" y="102" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="phase_einstieg_di" bpmnElement="phase_einstieg">
        <dc:Bounds x="240" y="80" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="phase_erarbeitung1_di" bpmnElement="phase_erarbeitung1">
        <dc:Bounds x="390" y="80" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="erarbeitung_gateway_di" bpmnElement="erarbeitung_gateway" isMarkerVisible="true">
        <dc:Bounds x="545" y="95" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="phase_erarbeitung2_di" bpmnElement="phase_erarbeitung2">
        <dc:Bounds x="520" y="200" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="phase_sicherung_di" bpmnElement="phase_sicherung">
        <dc:Bounds x="670" y="80" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="phase_transfer_di" bpmnElement="phase_transfer">
        <dc:Bounds x="820" y="80" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="phase_reflexion_di" bpmnElement="phase_reflexion">
        <dc:Bounds x="970" y="80" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="create_protokoll_di" bpmnElement="create_protokoll">
        <dc:Bounds x="1120" y="80" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="end_di" bpmnElement="end">
        <dc:Bounds x="1272" y="102" width="36" height="36" />
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>

</bpmn:definitions>
