@use '../../atoms/scroll/scrollbar';
@use '../../partials/text';
@use '../../partials/dir';
@use '../../partials/screen';

.message,
.ph-msg {
  padding: var(--sp-ultra-tight);
  @include dir.side(padding, var(--sp-normal), var(--sp-extra-tight));
  display: flex;

  &:hover {
    background-color: var(--bg-surface-hover);
    & .message__options {
      display: flex;
    }
  }

  &__avatar-container {
    padding-top: 6px;
    @include dir.side(margin, 0, var(--sp-tight));

    & .avatar-container {
      transition: transform 200ms var(--fluid-push);
      &:hover {
        transform: translateY(-4px);
      }
    }

    & button {
      cursor: pointer;
      display: flex;
    }
  }

  &__main-container {
    flex: 1;
    min-width: 0;

    position: relative;
  }
}

.message {
  &--full + &--full,
  &--body-only + &--full,
  & + .timeline-change,
  .timeline-change + & {
    margin-top: var(--sp-normal);
  }
  &__avatar-container {
    width: var(--av-small);
  }
  &--focus {
    --ltr: inset 2px 0 0 var(--bg-caution);
    --rtl: inset -2px 0 0 var(--bg-caution);
    @include dir.prop(box-shadow, var(--ltr), var(--rtl));
    background-color: var(--bg-caution-hover);
  }
}

.ph-msg {
  &__avatar {
    width: var(--av-small);
    height: var(--av-small);
    background-color: var(--bg-surface-hover);
    border-radius: var(--bo-radius);
  }

  &__header,
  &__body > div {
    margin: var(--sp-ultra-tight);
    @include dir.side(margin, 0, var(--sp-extra-tight));
    height: var(--fs-b1);
    width: 100%;
    max-width: 100px;
    background-color: var(--bg-surface-hover);
    border-radius: calc(var(--bo-radius) / 2);
  }
  &__body {
    display: flex;
    flex-wrap: wrap;
  }
  &__body > div:nth-child(1n) {
    max-width: 10%;
  }
  &__body > div:nth-child(2n) {
    max-width: 50%;
  }
}

.message__reply,
.message__body,
.message__body__wrapper,
.message__edit,
.message__reactions {
  max-width: calc(100% - 88px);
  min-width: 0;
  @include screen.smallerThan(tabletBreakpoint) {
    max-width: 100%;
  }
}

.message__header {
  display: flex;
  align-items: baseline;

  & .message__profile {
    min-width: 0;
    color: var(--tc-surface-high);
    @include dir.side(margin, 0, var(--sp-tight));

    & > span {
      @extend .cp-txt__ellipsis;
      color: inherit;
    }
    & > span:last-child {
      display: none;
    }
    &:hover {
      & > span:first-child {
        display: none;
      }
      & > span:last-child {
        display: block;
      }
    }
  }

  & .message__time {
    flex: 1;
    display: flex;
    justify-content: flex-end;
    & > .text {
      white-space: nowrap;
      color: var(--tc-surface-low);
    }
  }
}
.message__reply {
  &-wrapper {
    min-height: 20px;
    cursor: pointer;
    &:empty {
      border-radius: calc(var(--bo-radius) / 2);
      background-color: var(--bg-surface-hover);
      max-width: 200px;
      cursor: auto;
    }
    &:hover .text {
      color: var(--tc-surface-high);
    }
  }
  .text {
    @extend .cp-txt__ellipsis;
    color: var(--tc-surface-low);
  }
  .ic-raw {
    width: 16px;
    height: 14px;
  }
}
.message__body {
  word-break: break-word;

  & > .text > .message__body-plain {
    white-space: pre-wrap;
  }

  & a {
    word-break: break-word;
  }
  & > .text > a {
    white-space: initial !important;
  }

  & > .text > p + p {
    margin-top: var(--sp-normal);
  }

  & span[data-mx-pill] {
    background-color: hsla(0, 0%, 64%, 0.15);
    padding: 0 2px;
    border-radius: 4px;
    cursor: pointer;
    font-weight: var(--fw-medium);
    &:hover {
      background-color: hsla(0, 0%, 64%, 0.3);
      color: var(--tc-surface-high);
    }

    &[data-mx-ping] {
      background-color: var(--bg-ping);
      &:hover {
        background-color: var(--bg-ping-hover);
      }
    }
  }

  & span[data-mx-spoiler] {
    border-radius: 4px;
    background-color: rgba(124, 124, 124, 0.5);
    color: transparent;
    cursor: pointer;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    & > * {
      opacity: 0;
    }
  }

  .data-mx-spoiler--visible {
    background-color: var(--bg-surface-active) !important;
    color: inherit !important;
    user-select: initial !important;
    & > * {
      opacity: inherit !important;
    }
  }
  &-edited {
    color: var(--tc-surface-low);
  }
}
.message__edit {
  padding: var(--sp-extra-tight) 0;
  &-btns button {
    margin: var(--sp-tight) 0 0 0;
    padding: var(--sp-ultra-tight) var(--sp-tight);
    min-width: 0;
    @include dir.side(margin, 0, var(--sp-tight));
  }
}
.message__reactions {
  display: flex;
  flex-wrap: wrap;

  & .ic-btn-surface {
    display: none;
    padding: var(--sp-ultra-tight);
    margin-top: var(--sp-extra-tight);
  }
  &:hover .ic-btn-surface {
    display: block;
  }
}
.msg__reaction {
  margin: var(--sp-extra-tight) 0 0 0;
  @include dir.side(margin, 0, var(--sp-extra-tight));
  padding: 0 var(--sp-ultra-tight);
  min-height: 26px;
  display: inline-flex;
  align-items: center;
  color: var(--tc-surface-normal);
  background-color: var(--bg-surface-low);
  border: 1px solid var(--bg-surface-border);
  border-radius: 4px;
  cursor: pointer;

  & .react-emoji {
    height: 16px;
    margin: 2px;
  }
  &-count {
    margin: 0 var(--sp-ultra-tight);
    color: var(--tc-surface-normal);
  }
  &-tooltip .react-emoji {
    width: 16px;
    height: 16px;
    margin: 0 var(--sp-ultra-tight);
    margin-bottom: -2px;
  }

  @media (hover: hover) {
    &:hover {
      background-color: var(--bg-surface-hover);
    }
  }
  &:active {
    background-color: var(--bg-surface-active);
  }

  &--active {
    background-color: var(--bg-caution-active);

    @media (hover: hover) {
      &:hover {
        background-color: var(--bg-caution-hover);
      }
    }
    &:active {
      background-color: var(--bg-caution-active);
    }
  }
}
.message__options {
  position: absolute;
  top: 0;
  @include dir.prop(right, 60px, unset);
  @include dir.prop(left, unset, 60px);

  z-index: 99;
  transform: translateY(-100%);

  border-radius: var(--bo-radius);
  box-shadow: var(--bs-surface-border);
  background-color: var(--bg-surface-low);
  display: none;
}

// markdown formating
.message__body {
  & h1,
  h2,
  h3,
  h4,
  h5,
  h6 {
    margin: 0;
    margin-bottom: var(--sp-ultra-tight);
    font-weight: var(--fw-medium);
    &:first-child {
      margin-top: 0;
    }
    &:last-child {
      margin-bottom: 0;
    }
  }
  & h1,
  & h2 {
    color: var(--tc-surface-high);
    margin-top: var(--sp-normal);
    font-size: var(--fs-h2);
    line-height: var(--lh-h2);
    letter-spacing: var(--ls-h2);
  }
  & h3,
  & h4 {
    color: var(--tc-surface-high);
    margin-top: var(--sp-tight);
    font-size: var(--fs-s1);
    line-height: var(--lh-s1);
    letter-spacing: var(--ls-s1);
  }
  & h5,
  & h6 {
    color: var(--tc-surface-high);
    margin-top: var(--sp-extra-tight);
    font-size: var(--fs-b1);
    line-height: var(--lh-b1);
    letter-spacing: var(--ls-b1);
  }
  & hr {
    border-color: var(--bg-divider);
  }

  .text img {
    margin: var(--sp-ultra-tight) 0;
    max-width: 296px;
    border-radius: calc(var(--bo-radius) / 2);
  }

  & p,
  & pre,
  & blockquote {
    margin: 0;
    padding: 0;
  }
  & pre,
  & blockquote {
    margin: var(--sp-ultra-tight) 0;
    padding: var(--sp-extra-tight);
    background-color: var(--bg-surface-hover) !important;
    border-radius: calc(var(--bo-radius) / 2);
  }
  & pre {
    div {
      background: none !important;
      margin: 0 !important;
    }
    span {
      background: none !important;
    }
    .linenumber {
      min-width: 2.25em !important;
    }
  }
  & code {
    padding: 0 !important;
    color: var(--tc-code) !important;
    white-space: pre-wrap;
    @include scrollbar.scroll;
    @include scrollbar.scroll__h;
    @include scrollbar.scroll--auto-hide;
  }
  & pre {
    width: fit-content;
    max-width: 100%;
    @include scrollbar.scroll;
    @include scrollbar.scroll__h;
    @include scrollbar.scroll--auto-hide;
    & code {
      color: var(--tc-surface-normal) !important;
      white-space: pre;
    }
  }
  & blockquote {
    width: fit-content;
    max-width: 100%;
    @include dir.side(border, 4px solid var(--bg-surface-active), 0);
    white-space: initial !important;

    & > * {
      white-space: pre-wrap;
    }
  }
  & ul,
  & ol {
    margin: var(--sp-ultra-tight) 0;
    @include dir.side(padding, 24px, 0);
    white-space: initial !important;
  }
  & ul.contains-task-list {
    padding: 0;
    list-style: none;
  }
  & table {
    display: inline-block;
    max-width: 100%;
    white-space: normal !important;
    background-color: var(--bg-surface-hover);
    border-radius: calc(var(--bo-radius) / 2);
    border-spacing: 0;
    border: 1px solid var(--bg-surface-border);
    @include scrollbar.scroll;
    @include scrollbar.scroll__h;
    @include scrollbar.scroll--auto-hide;

    & td,
    & th {
      padding: var(--sp-extra-tight);
      border: 1px solid var(--bg-surface-border);
      border-width: 0 1px 1px 0;
      white-space: pre;
      &:last-child {
        border-width: 0;
        border-bottom-width: 1px;
        [dir='rtl'] & {
          border-width: 0 1px 1px 0;
        }
      }
      [dir='rtl'] &:first-child {
        border-width: 0;
        border-bottom-width: 1px;
      }
    }
    & tbody tr:nth-child(2n + 1) {
      background-color: var(--bg-surface-hover);
    }
    & tr:last-child td {
      border-bottom-width: 0px !important;
    }
  }
}

.message.message--type-emote {
  .message__body {
    font-style: italic;

    // Remove blockness of first `<p>` so that markdown emotes stay on one line.
    p:first-of-type {
      display: inline;
    }
  }
}
