/*
Copyright 2021 The Matrix.org Foundation C.I.C.

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.
*/

.mx_EventTile[data-layout=bubble],
.mx_EventTile[data-layout=bubble] ~ .mx_EventListSummary {
    --avatarSize: 32px;
    --gutterSize: 11px;
    --cornerRadius: 12px;
    --maxWidth: 70%;
}

.mx_EventTile[data-layout=bubble] {

    position: relative;
    margin-top: var(--gutterSize);
    margin-left: 50px;
    margin-right: 100px;

    &.mx_EventTile_continuation {
        margin-top: 2px;
    }

    /* For replies */
    .mx_EventTile {
        padding-top: 0;
    }

    &:hover,
    &.mx_EventTile_selected {
        &::before {
            content: '';
            position: absolute;
            top: -1px;
            bottom: -1px;
            left: -60px;
            right: -60px;
            z-index: -1;
            background: $eventbubble-bg-hover;
            border-radius: 4px;
        }

        .mx_EventTile_avatar {
            img {
                box-shadow: 0 0 0 3px $eventbubble-bg-hover;
            }
        }
    }

    .mx_SenderProfile,
    .mx_EventTile_line {
        width: fit-content;
        max-width: 70%;
    }

    .mx_SenderProfile {
        position: relative;
        top: -2px;
        left: 2px;
    }

    &[data-self=false] {
        .mx_EventTile_line {
            border-bottom-right-radius: var(--cornerRadius);
        }
        .mx_EventTile_avatar {
            left: -34px;
        }

        .mx_MessageActionBar {
            right: 0;
            transform: translate3d(90%, 50%, 0);
        }

        --backgroundColor: $eventbubble-others-bg;
    }
    &[data-self=true] {
        .mx_EventTile_line {
            border-bottom-left-radius: var(--cornerRadius);
            float: right;
            > a {
                left: auto;
                right: -68px;
            }
        }
        .mx_SenderProfile {
            display: none;
        }

        .mx_ReplyTile .mx_SenderProfile {
            display: block;
        }

        .mx_ReactionsRow {
            float: right;
            clear: right;
            display: flex;

            /* Moving the "add reaction button" before the reactions */
            > :last-child {
                order: -1;
            }
        }
        .mx_EventTile_avatar {
            top: -19px; // height of the sender block
            right: -35px;
        }

        --backgroundColor: $eventbubble-self-bg;
    }

    .mx_EventTile_line {
        position: relative;
        padding: var(--gutterSize);
        border-top-left-radius: var(--cornerRadius);
        border-top-right-radius: var(--cornerRadius);
        background: var(--backgroundColor);
        display: flex;
        gap: 5px;
        margin: 0 -12px 0 -9px;
        > a {
            position: absolute;
            padding: 10px 20px;
            top: 0;
            left: -68px;
        }
    }

    &.mx_EventTile_continuation[data-self=false] .mx_EventTile_line {
        border-top-left-radius: 0;
    }
    &.mx_EventTile_lastInSection[data-self=false] .mx_EventTile_line {
        border-bottom-left-radius: var(--cornerRadius);
    }

    &.mx_EventTile_continuation[data-self=true] .mx_EventTile_line {
        border-top-right-radius: 0;
    }
    &.mx_EventTile_lastInSection[data-self=true] .mx_EventTile_line {
        border-bottom-right-radius: var(--cornerRadius);
    }

    .mx_EventTile_avatar {
        position: absolute;
        top: 0;
        line-height: 1;
        z-index: 9;
        img {
            box-shadow: 0 0 0 3px $eventbubble-avatar-outline;
            border-radius: 50%;
        }
    }

    &.mx_EventTile_noSender {
        .mx_EventTile_avatar {
            top: -19px;
        }
    }

    .mx_BaseAvatar,
    .mx_EventTile_avatar {
        line-height: 1;
    }

    &[data-has-reply=true] {
        > .mx_EventTile_line {
            flex-direction: column;
        }

        .mx_ReplyThread_show {
            order: 99999;
        }

        .mx_ReplyThread {
            margin: 0 calc(-1 * var(--gutterSize));

            .mx_EventTile_reply {
                max-width: 90%;
                padding: 0;
                > a {
                    display: none !important;
                }
            }

            .mx_EventTile {
                display: flex;
                gap: var(--gutterSize);
                .mx_EventTile_avatar {
                    position: static;
                }
                .mx_SenderProfile {
                    display: none;
                }
            }
        }
    }

    .mx_EditMessageComposer_buttons {
        position: static;
        padding: 0;
        margin: 0;
        background: transparent;
    }

    .mx_ReactionsRow {
        margin-right: -18px;
        margin-left: -9px;
    }

    .mx_ReplyThread {
        border-left-width: 2px;
        border-left-color: $eventbubble-reply-color;
    }

    &.mx_EventTile_bubbleContainer,
    &.mx_EventTile_info,
    & ~ .mx_EventListSummary[data-expanded=false] {
        --backgroundColor: transparent;
        --gutterSize: 0;

        display: flex;
        align-items: center;
        justify-content: center;
        padding: 5px 0;

        .mx_EventTile_avatar {
            position: static;
            order: -1;
            margin-right: 5px;
        }
    }

    &.mx_EventTile_bubbleContainer {
        .mx_EventTile_line,
        .mx_EventTile_info {
            min-width: 100%;
        }
    }

    & ~ .mx_EventListSummary {
        --maxWidth: 80%;
        margin-left: calc(var(--avatarSize) + var(--gutterSize));
        margin-right: calc(var(--gutterSize) + var(--avatarSize));
        .mx_EventListSummary_toggle {
            float: none;
            margin: 0;
            order: 9;
            margin-left: 5px;
        }
        .mx_EventListSummary_avatars {
            padding-top: 0;
        }

        &::after {
            content: "";
            clear: both;
        }

        .mx_EventTile {
            margin: 0 6px;
        }

        .mx_EventTile_line {
            margin: 0 5px;
            > a {
                left: auto;
                right: 0;
                transform: translateX(calc(100% + 5px));
            }
        }

        .mx_MessageActionBar {
            transform: translate3d(90%, 0, 0);
        }
    }

    & ~ .mx_EventListSummary[data-expanded=false] {
        padding: 0 34px;
    }

    /* events that do not require bubble layout */
    & ~ .mx_EventListSummary,
    &.mx_EventTile_bad {
        .mx_EventTile_line {
            background: transparent;
        }

        &:hover {
            &::before {
                background: transparent;
            }
        }
    }

    & + .mx_EventListSummary {
        .mx_EventTile {
            margin-top: 0;
            padding: 2px 0;
        }
    }

    .mx_EventListSummary_toggle {
        margin-right: 55px;
    }

    /* Special layout scenario for "Unable To Decrypt (UTD)" events */
    &.mx_EventTile_bad > .mx_EventTile_line {
        display: grid;
        grid-template:
            "reply reply" auto
            "shield body" auto
            "shield link" auto
            / auto  1fr;
        .mx_EventTile_e2eIcon {
            grid-area: shield;
        }
        .mx_UnknownBody {
            grid-area: body;
        }
        .mx_EventTile_keyRequestInfo {
            grid-area: link;
        }
        .mx_ReplyThread_wrapper {
            grid-area: reply;
        }
    }


    .mx_EventTile_readAvatars {
        position: absolute;
        right: -110px;
        bottom: 0;
        top: auto;
    }

    .mx_MTextBody {
        max-width: 100%;
    }
}