// Copyright (C) 2019 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

.handle {
  background-color: hsl(215, 1%, 95%);
  border: 1px solid rgba(0, 0, 0, 0.1);
  border-bottom: none;
  cursor: row-resize;
  // Disable user selection since this handle is draggable to resize the
  // bottom panels.
  user-select: none;
  display: flex;

  .tabs {
    display: flex;
    overflow: hidden;
    flex: 1;

    .tab {
      font-family: "Roboto Condensed", sans-serif;
      color: #3c4b5d;
      padding: 4px;
      margin-top: 3px;
      align-items: center;
      cursor: pointer;
      font-size: 13px;
      border-radius: 3px 3px 0 0;
      background-color: #0000000f;
      border-right: solid 1px hsla(0, 0%, 75%, 1);
      overflow: hidden;
      white-space: nowrap;
      text-overflow: ellipsis;
      z-index: 5;
      box-shadow: #0000003b 0px 0px 3px 1px;
      display: flex;
      align-items: baseline;
      gap: 2px;

      &:hover {
        background-color: hsla(0, 0%, 85%, 1);
      }

      &[active] {
        background-color: white;
        cursor: default;
      }

      &:nth-child(1) {
        margin-left: 3px;
      }

      .pf-tab-title {
        margin: 0px 4px;
        overflow: hidden;

        .pf-nocontent {
          font-weight: lighter;
        }
      }
    }
  }

  .buttons {
    font-size: 24px;
    grid-area: buttons;
    display: flex;
    align-items: baseline;
    margin: 1px;
  }

  .handle-title {
    font-family: "Roboto Condensed", sans-serif;
    font-weight: 300;
    color: #3c4b5d;
    margin-left: 5px;
    padding: 5px;
    font-size: 13px;
  }
}

.details-panel {
  @include bottom-panel-font;

  // This is required to position locally-scoped (i.e. non-full-screen) modal
  // dialogs within the panel, as they use position: absolute.
  position: relative;

  .material-icons {
    @include transition(0.3s);
    font-size: 16px;
    margin-left: 5px;
    &:hover {
      cursor: pointer;
    }
    &.grey {
      border-radius: 3px;
      border: 1px solid transparent;
      background-color: #e8e8e8;
      &:hover {
        border: #475566 solid 1px;
      }
    }
  }

  .details-panel-heading {
    padding: 10px 0 5px 0;
    position: sticky;
    top: 0;

    // Relative/absolute/etc.. (non static) elements stack on top of this sticky
    // header, so setting the z-index here to 1 forces this header to render
    // over the top of other elements in the underlying panels.
    z-index: 1;

    display: flex;
    background: white;
    &.aggregation {
      padding-top: 5px;
      display: grid;
      grid-template-areas:
        "description range"
        "heading heading";
      grid-template-columns: 1fr auto;
      .states {
        font-size: 11px;
        margin: 0 10px 2px 10px;
        display: flex;
        overflow: hidden;
        .state {
          height: 20px;
          line-height: 20px;
          padding-left: 3px;
          padding-right: 3px;
          border-left: white 1px solid;
          &:hover {
            min-width: fit-content;
          }
        }
      }
      .time-range {
        text-align: right;
        font-size: 11px;
        font-weight: 400;
        margin-right: 5px;
      }
      table {
        grid-area: heading;
      }
      th {
        cursor: pointer;
        .material-icons {
          margin-left: 2px;
          font-size: 18px;
        }
      }
    }
    h2 {
      font-size: 16px;
      font-weight: 400;
      padding: 0 10px;
      &.split {
        width: 50%;
      }
    }
    &.flamegraph-profile {
      display: flex;
      justify-content: space-between;
      align-content: center;
      height: 30px;
      padding: 0;
      font-size: 12px;
      * {
        align-self: center;
      }
      .options {
        display: inline-flex;
        justify-content: space-around;
      }
      .details {
        display: inline-flex;
        justify-content: flex-end;
      }
      .title {
        justify-self: start;
        margin-left: 5px;
        font-size: 14px;
        margin-right: 10px;
      }
      .time {
        justify-self: end;
        margin-right: 10px;
      }
      .selected {
        justify-self: end;
        margin-right: 10px;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        width: 200px;
      }
    }
  }

  table {
    @include transition(0.1s);
    @include table-font-size;
    width: 100%;
    // Aggregation panel uses multiple table elements that need to be aligned,
    // which is done by using fixed table layout.
    table-layout: fixed;
    word-wrap: break-word;
    padding: 0 10px;
    tr:hover {
      td,
      th {
        background-color: $table-hover-color;

        &.no-highlight {
          background-color: white;
        }
      }
    }
    th {
      text-align: left;
      width: 30%;
      font-weight: normal;
      vertical-align: top;
    }
    td.value {
      white-space: pre-wrap;
    }
    td.padding {
      min-width: 10px;
    }
    .array-index {
      text-align: right;
    }
  }

  .auto-layout {
    table-layout: auto;
  }
}

.slice-details-latency-panel {
  // This panel is set to relative to make this panel a positioned element
  // This is to allow the absolute text panels below to be positioned relative
  // to this panel and not our parent.
  position: relative;
  user-select: text;

  .text-detail {
    font-size: smaller;
  }

  .slice-details-wakeup-text {
    position: absolute;
    left: 40px;
    top: 20px;
  }

  .slice-details-latency-text {
    position: absolute;
    left: 106px;
    top: 90px;
  }

  .slice-details-image {
    user-select: none;
    width: 180px;
    height: 150px;
  }
}

.details-table-multicolumn {
  display: flex;
  user-select: "text";
}

.flow-link:hover {
  cursor: pointer;
  text-decoration: underline;
}

.flow-info i.material-icons {
  color: rgb(60, 86, 136);
}

.warning {
  position: relative;
  font-size: 13px;
  color: hsl(45, 100%, 48%);
}

.warning i.material-icons {
  font-size: 13px;
}

.warning .tooltip {
  visibility: hidden;

  background-color: white;
  color: #3f4040;
  box-shadow: 1px 3px 15px rgba(23, 32, 44, 0.3);

  padding: 4px;
  border-radius: 4px;

  text-align: center;
  white-space: nowrap;

  position: absolute;
  z-index: 1;
  top: -5px;
  left: 105%;
}

.warning:hover .tooltip {
  visibility: visible;
}

.flow-button {
  color: rgb(60, 86, 136);
}

.half-width-panel {
  max-width: 50%;
  flex-grow: 1;
  height: fit-content;
}

.notes-editor-panel {
  padding: 10px;
  display: flex;
  flex-direction: column;
  height: 100%;
  font-family: "Roboto Condensed", sans-serif;
  font-weight: 300;
  color: #3c4b5d;

  .notes-editor-panel-heading-bar {
    display: flex;
    padding-bottom: 8px;
    font-size: 14px;
    .notes-editor-panel-heading {
      padding-top: 3px;
    }
    input {
      vertical-align: middle;
    }
  }

  input[type="text"] {
    flex-grow: 1;
    border-radius: 4px;
    border: 1px solid #dcdcdc;
    padding: 3px;
    margin: 0 10px;
    &:focus {
      outline: none;
      box-shadow: 1px 1px 1px rgba(23, 32, 44, 0.3);
    }
  }
}

.sum {
  font-weight: bolder;
  font-size: 12px;
  .sum-data {
    border-bottom: 1px solid $table-border-color;
  }
}

.log-panel {
  display: contents;

  header {
    position: sticky;
    top: 0;
    left: 0;
    z-index: 1;
    background-color: white;
    color: #3c4b5d;
    padding: 5px;
    display: grid;
    grid-template-columns: auto auto;
    justify-content: space-between;
  }

  .log-rows-label {
    display: flex;
    align-items: center;
  }

  .log-filters {
    display: flex;
    margin-right: 5px;
    align-items: center;

    .log-label {
      padding-right: 0.35rem;
    }

    .tag-container {
      height: auto;
      min-height: 34px;
      padding: 2px;
      margin: 2px;
      cursor: text;
      border-radius: 3px;
      display: flex;
      align-items: center;

      .chips .chip {
        display: inline-block;
        width: auto;
        float: left;

        background-color: #0878b2;
        color: #fff;
        border-radius: 3px;
        margin: 2px;
        overflow: hidden;

        .chip-button {
          padding: 4px;
          cursor: pointer;
          background-color: #054570;
          display: inline-block;
        }

        .chip-text {
          padding: 4px;
          display: inline-block;
          pointer-events: none;
        }
      }

      .chip-input {
        margin-left: 5px;
      }
    }

    .filter-widget {
      user-select: none;
      cursor: pointer;
      position: relative;
      display: inline-block;
    }

    .filter-widget .tooltip {
      visibility: hidden;
      width: 120px;
      background-color: black;
      color: #fff;
      text-align: center;
      border-radius: 6px;
      padding: 5px 0;

      /* Position the tooltip */
      position: absolute;
      z-index: 1;
      top: 130%;
      right: 50%;
    }

    .filter-widget:hover .tooltip {
      visibility: visible;
    }
  }

  header.stale {
    color: grey;
  }

  .rows {
    position: relative;
    direction: ltr;
    width: 100%;

    .row {
      @include transition();
      position: absolute;
      width: 100%;
      height: 20px;
      line-height: 20px;
      background-color: hsl(214, 22%, 100%);

      &.D {
        color: hsl(122, 20%, 40%);
      }
      &.V {
        color: hsl(122, 20%, 30%);
      }
      &.I {
        color: hsl(0, 0%, 20%);
      }
      &.W {
        color: hsl(45, 60%, 45%);
      }
      &.E {
        color: hsl(4, 90%, 58%);
      }
      &.F {
        color: hsl(291, 64%, 42%);
      }
      &.stale {
        color: #aaa;
      }
      &:nth-child(even) {
        background-color: hsl(214, 22%, 95%);
      }
      &:hover {
        background-color: $table-hover-color;
      }
      .cell {
        font-size: 11px;
        font-family: var(--monospace-font);
        white-space: nowrap;
        overflow: scroll;
        padding-left: 10px;
        padding-right: 10px;
        display: inline-block;
        &:first-child {
          padding-left: 5px;
        }
        &:last-child {
          padding-right: 5px;
        }
        &:only-child {
          width: 100%;
        }

        // The following children will be used as columns in the table showing
        // Android logs.

        // 1.Timestamp
        &:nth-child(1) {
          width: 7rem;
          text-overflow: clip;
          text-align: right;
        }
        // 2.Level
        &:nth-child(2) {
          width: 4rem;
        }
        // 3.Tag
        &:nth-child(3) {
          width: 13rem;
        }

        &.with-process {
          // 4.Process name
          &:nth-child(4) {
            width: 18rem;
          }
          // 5.Message - a long string, will take most of the display space.
          &:nth-child(5) {
            width: calc(100% - 42rem);
          }
        }

        &.no-process {
          // 4.Message - a long string, will take most of the display space.
          &:nth-child(4) {
            width: calc(100% - 24rem);
          }
        }

        &.row-header {
          text-align: left;
          font-weight: bold;
          font-size: 13px;
        }

        &.row-header:first-child {
          padding-left: 15px;
        }
      }
    }
  }
}

.pf-details-table {
  margin: 10px;
}

.ftrace-panel {
  display: contents;

  .sticky {
    position: sticky;
    top: 0;
    left: 0;
    z-index: 1;
    background-color: white;
    color: #3c4b5d;
    padding: 5px 10px;
    display: grid;
    grid-template-columns: auto auto;
    justify-content: space-between;
  }

  .ftrace-rows-label {
    display: flex;
    align-items: center;
  }

  header.stale {
    color: grey;
  }

  .rows {
    position: relative;
    direction: ltr;
    min-width: 100%;
    font-size: 12px;

    .row {
      @include transition();
      position: absolute;
      min-width: 100%;
      line-height: 20px;
      background-color: hsl(214, 22%, 100%);
      white-space: nowrap;

      &:nth-child(even) {
        background-color: hsl(214, 22%, 95%);
      }

      &:hover {
        background-color: $table-hover-color;
      }

      .cell {
        font-family: var(--monospace-font);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        margin-right: 8px;
        display: inline-block;

        .colour {
          display: inline-block;
          height: 10px;
          width: 10px;
          margin-right: 4px;
        }

        &:first-child {
          margin-left: 8px;
        }

        &:last-child {
          margin-right: 8px;
        }

        &:only-child {
          width: 100%;
        }

        // Timestamp
        &:nth-child(1) {
          width: 13em;
          // text-align: right;
        }

        // Name
        &:nth-child(2) {
          width: 24em;
        }

        // CPU
        &:nth-child(3) {
          width: 3em;
        }

        // Process
        &:nth-child(4) {
          width: 24em;
        }

        &.row-header {
          font-weight: bold;
        }
      }
    }
  }
}

.screenshot-panel {
  height: 100%;
  img {
    max-height: 100%;
  }
}

.pf-noselection {
  height: 100%;
}
