<div class="header" #header>
  <h2>{{section}}</h2>
</div>

<ng-container [ngSwitch]="section">
  <div
    *ngSwitchCase="'Team Selection'"
    id="team_selection"
    class="container-fluid"
  >
    <div class="row">
      <label for="match_number">Match Number</label>
      <input
        [(ngModel)]="matchNumber"
        type="number"
        id="match_number"
        min="1"
        max="999"
      />
    </div>
    <div class="row">
      <label for="team_number">Team Number</label>
      <input
        [(ngModel)]="teamNumber"
        type="number"
        id="team_number"
        min="1"
        max="9999"
      />
    </div>
    <div class="row">
      <label for="set_number">Set Number</label>
      <input
        [(ngModel)]="setNumber"
        type="number"
        id="set_number"
        min="1"
        max="10"
      />
    </div>
    <div class="row">
      <label for="comp_level">Comp Level</label>
      <select [(ngModel)]="compLevel" type="number" id="comp_level">
        <option *ngFor="let level of COMP_LEVELS" [ngValue]="level">
          {{COMP_LEVEL_LABELS[level]}}
        </option>
      </select>
    </div>
    <div class="buttons">
      <!-- hack to right align the next button -->
      <div></div>
      <button class="btn btn-primary" (click)="changeSectionTo('Init');">
        Next
      </button>
    </div>
  </div>

  <div *ngSwitchCase="'Init'" id="init" class="container-fluid">
    <h2>Select Starting Position</h2>
    <img
      id="field_starting_positions_image"
      src="/sha256/b71def525fb78486617a8b350c0ba6907e8ea25f78d4084a932cba8ae922528c/pictures/field/field.jpg"
      alt="Starting Positions Image"
      class="img-fluid"
    />
    <div *ngFor="let i of [1, 2, 3, 4]">
      <label>
        <input
          type="radio"
          name="radio-group"
          [value]="i"
          (change)="selectedValue = $event.target.value"
        />
        {{ i }}
      </label>
    </div>
    <div class="buttons">
      <!-- Creates a responsive stack of full-width, "block buttons". -->
      <div class="d-grid gap-5">
        <button
          class="btn btn-primary"
          [disabled]="!selectedValue"
          (click)="changeSectionTo('Pickup'); addAction({type: 'startMatchAction', position: selectedValue});"
        >
          Start Match
        </button>
      </div>
    </div>
  </div>

  <div *ngSwitchCase="'Pickup'" id="PickUp" class="container-fluid">
    <div class="d-grid gap-5">
      <button class="btn btn-secondary" (click)="undoLastAction()">UNDO</button>
      <button
        class="btn btn-danger"
        (click)="changeSectionTo('Dead'); addAction({type: 'robotDeathAction', robotOn: false});"
      >
        DEAD
      </button>
      <button
        class="btn btn-warning"
        (click)="changeSectionTo('Place'); addAction({type: 'pickupObjectAction', objectType: ObjectType.kCone});"
      >
        CONE
      </button>
      <button
        class="btn btn-primary"
        (click)="changeSectionTo('Place'); addAction({type: 'pickupObjectAction', objectType: ObjectType.kCube});"
      >
        CUBE
      </button>
      <!-- 'Balancing' during auto. -->
      <div *ngIf="autoPhase" class="d-grid gap-2">
        <label>
          <input type="checkbox" (change)="dockedValue = $event.target.value" />
          Docked
        </label>
        <label>
          <input
            type="checkbox"
            (change)="engagedValue = $event.target.value"
          />
          Engaged
        </label>
        <br />
        <button
          class="btn btn-info"
          (click)="addAction({type: 'autoBalanceAction', docked: dockedValue, engaged: engagedValue});"
        >
          Submit Balancing
        </button>
      </div>
      <button
        *ngIf="autoPhase"
        class="btn btn-info"
        (click)="autoPhase = false; addAction({type: 'endAutoPhase'});"
      >
        Start Teleop
      </button>
      <button
        *ngIf="!autoPhase"
        class="btn btn-info"
        (click)="changeSectionTo('Endgame')"
      >
        Endgame
      </button>
    </div>
  </div>

  <div *ngSwitchCase="'Place'" id="Place" class="container-fluid">
    <div class="d-grid gap-5">
      <button class="btn btn-secondary" (click)="undoLastAction()">UNDO</button>
      <button
        class="btn btn-danger"
        (click)="changeSectionTo('Dead'); addAction({type: 'robotDeathAction', robotOn: false});"
      >
        DEAD
      </button>
      <button
        class="btn btn-success"
        (click)="changeSectionTo('Pickup'); addAction({type: 'placeObjectAction', scoreLevel: ScoreLevel.kHigh});"
      >
        HIGH
      </button>
      <button
        class="btn btn-warning"
        (click)="changeSectionTo('Pickup'); addAction({type: 'placeObjectAction', scoreLevel: ScoreLevel.kMiddle});"
      >
        MID
      </button>
      <button
        class="btn btn-danger"
        (click)="changeSectionTo('Pickup'); addAction({type: 'placeObjectAction', scoreLevel: ScoreLevel.kLow});"
      >
        LOW
      </button>
      <!-- 'Balancing' during auto. -->
      <div *ngIf="autoPhase" class="d-grid gap-2">
        <label>
          <input type="checkbox" (change)="dockedValue = $event.target.value" />
          Docked
        </label>
        <label>
          <input
            type="checkbox"
            (change)="engagedValue = $event.target.value"
          />
          Engaged
        </label>
        <br />
        <button
          class="btn btn-info"
          (click)="addAction({type: 'autoBalanceAction', docked: dockedValue, engaged: engagedValue});"
        >
          Submit Balancing
        </button>
      </div>
      <button
        *ngIf="autoPhase"
        class="btn btn-info"
        (click)="autoPhase = false; addAction({type: 'endAutoPhase'});"
      >
        Start Teleop
      </button>
      <button
        *ngIf="!autoPhase"
        class="btn btn-info"
        (click)="changeSectionTo('Endgame')"
      >
        Endgame
      </button>
    </div>
  </div>

  <div *ngSwitchCase="'Endgame'" id="Endgame" class="container-fluid">
    <div class="d-grid gap-5">
      <button class="btn btn-secondary" (click)="undoLastAction()">UNDO</button>
      <button
        class="btn btn-danger"
        (click)="changeSectionTo('Dead'); addAction({type: 'robotDeathAction', robotOn: false});"
      >
        DEAD
      </button>
      <label>
        <input type="checkbox" (change)="dockedValue = $event.target.value" />
        Docked
      </label>
      <label>
        <input type="checkbox" (change)="engagedValue = $event.target.value" />
        Engaged
      </label>
      <button
        *ngIf="!autoPhase"
        class="btn btn-info"
        (click)="changeSectionTo('Review and Submit'); addAction({type: 'endMatchAction', docked: dockedValue, engaged: engagedValue});"
      >
        End Match
      </button>
    </div>
  </div>

  <div *ngSwitchCase="'Dead'" id="Dead" class="container-fluid">
    <h2>Robot is dead</h2>
    <div class="d-grid gap-2">
      <button
        class="btn btn-success"
        (click)="changeSectionTo('Pickup'); addAction({type: 'robotDeathAction', robotOn: true}); "
      >
        Revive
      </button>
    </div>
  </div>

  <div *ngSwitchCase="'Review and Submit'" id="Review" class="container-fluid">
    <div class="d-grid gap-5">
      <button class="btn btn-secondary" (click)="undoLastAction()">UNDO</button>
      <button
        *ngIf="!autoPhase"
        class="btn btn-warning"
        (click)="submitActions();"
      >
        Submit
      </button>
    </div>
  </div>

  <div *ngSwitchCase="'Success'" id="Success" class="container-fluid">
    <h2>Successfully submitted data.</h2>
  </div>
</ng-container>
