import { Mark } from "prosemirror-model";
import React, { Fragment, useState, useEffect, useContext } from "react";
import { Transition } from "react-transition-group";
import styled from "styled-components";
import { WaxContext } from "wax-prosemirror-core";

const TrackChangeBoxStyled = styled.div`
  display: flex;
  flex-direction: column;
  margin-top: 10px;
  border: 1px solid blue;
  position: absolute;
  transition: ${({ state }) => "top 1s, opacity 1.5s, left 1s"};
  top: ${props => (props.top ? `${props.top}px` : 0)};
  left: ${props => (props.active ? `${63}%` : `${65}%`)};
  opacity: ${({ state }) => {
    switch (state) {
      case "exited":
        return 0.2;
      case "exiting":
        return 0.4;
      case "entering":
        return 0.6;
      case "entered":
        return 1;
    }
  }};
`;

export default ({ trackChange, view, top, dataBox }) => {
  const [animate, setAnimate] = useState(false);
  const { view: { main }, app, activeView } = useContext(WaxContext);
  let action;
  if (trackChange instanceof Mark) {
    if ((trackChange.type.name = "format_change")) {
      const { attrs: { username, before, after } } = trackChange;
      action = `User ${username} added ${after[0]}`;
    }
  } else {
    action = `User demo changed paragraph to heading 1`;
  }

  let active = false;
  useEffect(() => {
    setAnimate(true);
  }, []);

  return (
    <Fragment>
      <Transition in={animate} timeout={1000}>
        {state => (
          <TrackChangeBoxStyled
            top={top}
            state={state}
            data-box={dataBox}
            active={active}
          >
            <div>
              {action}
              <button>Accept</button>
              <button>Reject</button>
            </div>
          </TrackChangeBoxStyled>
        )}
      </Transition>
    </Fragment>
  );
};