import {useNavigation} from '@react-navigation/native';
import React, {useEffect, useRef} from 'react';
import {
  Image,
  StyleSheet,
  Text,
  TouchableOpacity,
  TouchableWithoutFeedback,
  View,
} from 'react-native';
import {useDispatch, useSelector} from 'react-redux';
import {RootState} from 'src/store/rootReducer';
import Avatar from '../../components/common/Avatar';
import {ProfilePreviewType, ScreenType, UserType} from '../../types';
import {normalize} from '../../utils';
import {navigateToProfile} from '../../utils/users';

interface TaggDraggableProps {
  taggedUser: ProfilePreviewType;
  editingView: boolean;
  deleteFromList: () => void;
  setStart: Function;
}

const TaggDraggable: React.FC<TaggDraggableProps> = (
  props: TaggDraggableProps,
) => {
  const navigation = useNavigation();

  const {taggedUser, editingView, deleteFromList, setStart} = props;
  const state = useSelector((rs: RootState) => rs);

  const dispatch = useDispatch();
  let uriX = require('../../assets/images/draggableX.png');
  let uriTip = require('../../assets/images/Tagg-Triangle.png');

  const draggableRef = useRef(null);
  useEffect(() => {
    draggableRef.current.measure((fx, fy, width, height, px, py) => {
      // console.log('Drag Component width is: ' + width);
      // console.log('Drag Component height is: ' + height);
      // console.log('X offset to frame: ' + fx);
      // console.log('Y offset to frame: ' + fy);
      // console.log('X offset to page: ' + px);
      // console.log('Y offset to page: ' + py);
      setStart([width, height]);
    });
  }, []);

  const user: UserType = {
    userId: taggedUser.id,
    username: taggedUser.username,
  };

  return (
    <TouchableWithoutFeedback style={{borderColor: 'red'}}>
      <View style={styles.container}>
        <Image style={styles.imageTip} source={uriTip} />
        <TouchableOpacity
          onPressIn={() =>
            navigateToProfile(
              state,
              dispatch,
              navigation,
              ScreenType.Profile,
              user,
            )
          }
          disabled={editingView}
          style={styles.content}
          ref={draggableRef}>
          <Avatar style={styles.avatar} uri={taggedUser.thumbnail_url} />
          <Text style={editingView ? styles.buttonTitle : styles.buttonTitleX}>
            @{taggedUser.username}
          </Text>
          {editingView && (
            <TouchableOpacity
              disabled={false}
              onPressIn={() => deleteFromList()}
              style={styles.imageX}>
              <Image style={styles.imageX} source={uriX} />
            </TouchableOpacity>
          )}
        </TouchableOpacity>
      </View>
    </TouchableWithoutFeedback>
  );
};

const styles = StyleSheet.create({
  imageTip: {
    height: normalize(12),
    aspectRatio: 12 / 8,
  },
  container: {
    flexDirection: 'column',
    alignItems: 'center',
    justifyContent: 'center',
  },
  buttonTitle: {
    color: 'white',
    fontSize: normalize(11),
    fontWeight: '700',
    lineHeight: normalize(13.13),
    letterSpacing: normalize(0.6),
    paddingHorizontal: '1%',
  },
  buttonTitleX: {
    color: 'white',
    fontSize: normalize(11),
    fontWeight: '700',
    lineHeight: normalize(13.13),
    letterSpacing: normalize(0.6),
    paddingHorizontal: '1%',
  },
  avatar: {
    height: normalize(20),
    width: normalize(20),
    borderRadius: normalize(20) / 2,
  },
  imageX: {
    width: normalize(15),
    height: normalize(15),
  },
  content: {
    justifyContent: 'space-evenly',
    alignItems: 'center',
    flexDirection: 'row',
    borderRadius: 20,
    paddingVertical: normalize(5),
    paddingHorizontal: normalize(8),
    backgroundColor: 'rgba(0, 0, 0, 0.8)',
  },
});

export default TaggDraggable;
