/* eslint-disable prettier/prettier */
/* eslint-disable react-native/no-inline-styles */
/* eslint-disable prettier/prettier */
import CheckBox from '@react-native-community/checkbox';
import Moment from 'moment';
import React, {useEffect, useState} from 'react';
import {
  Image,
  Modal,
  ScrollView,
  TextInput,
  TouchableOpacity,
  View,
  KeyboardAvoidingView,
} from 'react-native';
import ButtonComponent from '../../../components/ButtonComponent';
import {launchImageLibrary} from 'react-native-image-picker';
import {useDispatch, useSelector} from 'react-redux';
import {getUserInfoById} from '../../../store/actions/CommonAction';
import {
  getAttachmentByOTId,
  getCommentList,
  getOTbyId,
  getOTHistoriesByOTId,
  getUserDirectManagers,
  postApproveOTVoucher,
  postAttachmentToComment,
  postLikeComment,
  postNewComment,
  deleteOtTicketRequest,
  postRejectOTVoucher,
} from '../../../store/actions/UserAction';
import {IMAGES} from '../../../values/images';
import styles from '../style';
import Toast from 'react-native-toast-message';
import AppText from '../../../components/AppText';
const OverTimeModalDetail = props => {
  const dispatch = useDispatch();
  const userDetails = useSelector(state => state.UserInfo.userInfo);
  const {onClose, modalDetailId, setPayloadOtApproveList} = props;

  const [OTDetail, setOTDetail] = useState(null);
  const [OTDetailAttachmentList, setOTDetailAttachmentList] = useState([]);
  const [OTDetailHistoriesList, setOTDetailHistoriesList] = useState([]);
  const [comment, setComment] = useState('');
  const [toggleNextApprover, setToggleNextApprover] = useState(false);
  const [myDirectorManagerList, setMyDirectorManagerList] = useState([]);
  const [toggleSelectedNextApprover, setToggleSelectedNextApprover] =
    useState(false);
  const [comment2, setComment2] = useState('');
  const [commentAttachmentList, setCommentAttachmentList] = useState([]);
  const [commentList, setCommentList] = useState([]);
  const [nextApproverId, setNextApproverId] = useState('');
  const [historyUserData, setHistoryUserData] = useState(null);

  const getOTDetailId = async () => {
    const res = await dispatch(getOTbyId(modalDetailId));
    setOTDetail(res);
  };

  const getAttachmentByOtID = async () => {
    const res = await dispatch(getAttachmentByOTId(modalDetailId));
    setOTDetailAttachmentList(res);
  };

  const getOTHistoriesByOtId = async () => {
    const res = await dispatch(getOTHistoriesByOTId(modalDetailId));
    setOTDetailHistoriesList(res);
  };

  const getMyDirectorManagerList = async () => {
    const res = await dispatch(getUserDirectManagers());
    setMyDirectorManagerList(res);
  };

  const onPostAttachmentOfComment = async commentId => {
    const res = await dispatch(
      postAttachmentToComment(commentId, commentAttachmentList),
    );
    //console.log('onPostAttachmentOfComment', res);
    if (res) {
      setCommentAttachmentList([]);
      getCommentOfModalDetailList();
    }
  };

  const onPostNewComment = async () => {
    let body = {
      code: `${modalDetailId}`,
      content: `${comment2}`,
      number_of_like: 0,
      reply_for: null,
    };
    const res = await dispatch(postNewComment(body));
    if (res) {
      let commentId = res.id;
      if (commentAttachmentList.length && commentId) {
        onPostAttachmentOfComment(commentId);
      }
    }
  };

  const getCommentOfModalDetailList = async () => {
    const res = await dispatch(getCommentList(modalDetailId));
    setCommentList(res);
  };

  const onApproverOTVoucher = async () => {
    let body = {
      OtId: modalDetailId,
      body: {
        comment: comment,
        nextApproverId: nextApproverId,
      },
    };
    const res = await dispatch(postApproveOTVoucher(body));
    if (res) {
      Toast.show({
        type: 'success',
        text1: 'Hệ thống',
        text2: 'Lưu yêu cầu tăng ca thành công👍',
        style: {zIndex: 1001},
      });
      setPayloadOtApproveList(prev => ({...prev, isRefresh: true}));
    } else {
      Toast.show({
        type: 'error',
        text1: 'Hệ thống',
        text2: 'Thao tác không thành công👍',
        style: {zIndex: 1001},
      });
    }
    onClose();
  };
  const onRejectOTVoucher = async () => {
    const res = await dispatch(postRejectOTVoucher(modalDetailId, comment));
    if (res) {
      Toast.show({
        type: 'success',
        text1: 'Hệ thống',
        text2: 'Từ chối yêu cầu tăng ca thành công👍',
        style: {zIndex: 1001},
      });
      setPayloadOtApproveList(prev => ({...prev, isRefresh: true}));
    } else {
      Toast.show({
        type: 'error',
        text1: 'Hệ thống',
        text2: 'Từ chối yêu cầu tăng ca không thành côngg👍',
        style: {zIndex: 1001},
      });
    }
    onClose();
  };
  const onDeleteRequest = async () => {
    const res = await dispatch(deleteOtTicketRequest(OTDetail.id));
    if (res) {
      Toast.show({
        type: 'success',
        text1: 'Hệ thống',
        text2: 'Hủy thành công👍',
        style: {zIndex: 1001},
      });
      onClose(null);
    } else {
      Toast.show({
        type: 'error',
        text1: 'Hệ thống',
        text2: 'Hủy  thất bại 💔',
        style: {zIndex: 1001},
      });
      onClose(null);
    }
  };
  const onPostNewLikeOfComment = async commentId => {
    const res = await dispatch(postLikeComment(commentId));
    if (res) {
      getCommentOfModalDetailList();
    }
  };

  const getUserById = async userId => {
    const res = await dispatch(getUserInfoById(userId));
    setHistoryUserData(res);
  };

  useEffect(() => {
    getCommentOfModalDetailList();
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);

  useEffect(() => {
    getOTDetailId();
    getAttachmentByOtID();
    getOTHistoriesByOtId();
    getMyDirectorManagerList();
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [modalDetailId]);

  useEffect(() => {
    if (OTDetailHistoriesList.length === 0) {
      getUserById(OTDetail?.approver_id || OTDetail?.staff_id);
    }
  }, [OTDetail]);

  //console.log('OTDetailAttachmentList', OTDetailAttachmentList);
  return (
    <Modal
      animationType="slide"
      transparent={true}
      visible={true}
      propagateSwipe={true}
      onRequestClose={() => onClose(null)}>
      <ScrollView style={styles.modalView} showsVerticalScrollIndicator={false}>
        <View style={{flexDirection: 'row', justifyContent: 'space-between'}}>
          <AppText style={styles.modalTitle}>Chi tiết tăng ca</AppText>
          <TouchableOpacity onPress={() => onClose(null)}>
            <Image source={IMAGES.IcClose} />
          </TouchableOpacity>
        </View>
        <View style={{flexDirection: 'row', marginTop: 10}}>
          <Image
            source={{
              uri: 'https://meu.anawork.com' + OTDetail?.extend_creator_avatar,
            }}
            style={styles.ImgAvatar}
          />
          <View style={{marginLeft: 15}}>
            <AppText
              style={
                styles.modalTitle
              }>{`${OTDetail?.extend_creator_full_name}`}</AppText>
            <AppText>{OTDetail?.extend_creator_department}</AppText>
          </View>
        </View>

        <View style={{marginTop: 10}}>
          <AppText style={styles.modalTitle}>Thông tin tăng ca</AppText>
          <View style={styles.rowView}>
            <AppText>Từ ngày</AppText>
            <View
              style={{
                alignItems: 'flex-end',
                flexDirection: 'row',
                justifyContent: 'flex-end',
                borderBottomWidth: 0.5,
              }}>
              <AppText>{Moment(OTDetail?.start).format('DD/MM/YYYY')}</AppText>
            </View>
          </View>
          <View style={styles.rowView}>
            <AppText>Giờ</AppText>
            <View
              style={{
                alignItems: 'flex-end',
                flexDirection: 'row',
                justifyContent: 'flex-end',
                borderBottomWidth: 0.5,
              }}>
              <AppText>{Moment(OTDetail?.start).format('HH:mm')}</AppText>
            </View>
          </View>
          <View style={styles.rowView}>
            <AppText>Đến ngày</AppText>
            <View
              style={{
                alignItems: 'flex-end',
                flexDirection: 'row',
                justifyContent: 'flex-end',
                borderBottomWidth: 0.5,
              }}>
              <AppText>{Moment(OTDetail?.finish).format('DD/MM/YYYY')}</AppText>
            </View>
          </View>
          <View style={styles.rowView}>
            <AppText>Giờ</AppText>
            <View
              style={{
                alignItems: 'flex-end',
                flexDirection: 'row',
                justifyContent: 'flex-end',
                borderBottomWidth: 0.5,
              }}>
              <AppText>{Moment(OTDetail?.finish).format('HH:mm')}</AppText>
            </View>
          </View>
          <View style={styles.rowView}>
            <AppText style={{flex: 1}}>Lý do</AppText>
            <AppText style={{flex: 1, textAlign: 'right'}}>
              {OTDetail?.reason}
            </AppText>
          </View>
          <View style={styles.rowView}>
            <AppText style={{flex: 1}}>Tệp đính kèm</AppText>
            <View
              style={{
                flex: 2,
                marginTop: 10,
              }}>
              {OTDetailAttachmentList && OTDetailAttachmentList.length !== 0 ? (
                OTDetailAttachmentList.map((el, index) => {
                  // <Image
                  //   key={index}
                  //   source={{uri: el?.uri}}
                  //   style={styles.imgUpload}
                  // />;
                  return <AppText numberOfLines={1}>{el.file_name}</AppText>;
                })
              ) : (
                <AppText style={{fontSize: 12, textAlign: 'right'}}>
                  Không có tệp đính kèm
                </AppText>
              )}
            </View>
          </View>

          {/* Lịch sử duyệt */}
          <View style={{marginTop: 20}}>
            <AppText
              style={[
                styles.modalTitle,
                {
                  marginBottom: 10,
                },
              ]}>
              Lịch sử duyệt
            </AppText>
            {OTDetailHistoriesList && OTDetailHistoriesList.length !== 0 ? (
              OTDetailHistoriesList.map((item, index) => (
                <View
                  key={item?.id}
                  style={{
                    flexDirection: 'row',
                    marginTop: 16,
                  }}>
                  <Image
                    source={{
                      uri:
                        'https://meu.anawork.com' + item.extend_approver_avatar,
                    }}
                    style={{width: 50, height: 50, borderRadius: 8}}
                  />
                  <View>
                    <AppText
                      style={{
                        fontSize: 16,
                        fontWeight: '500',
                        marginLeft: 10,
                      }}>{`${item.extend_approver_full_name}`}</AppText>
                    <View
                      style={{
                        flexDirection: 'row',
                        alignItems: 'center',
                        marginLeft: 8,
                      }}>
                      {item.extend_approved_status_name == 'APPROVED' && (
                        <Image
                          style={{height: 16, width: 16}}
                          source={IMAGES.uCheck}
                        />
                      )}
                      {item.extend_approved_status_name == 'PENDING' && (
                        <Image source={IMAGES.uMinus} />
                      )}
                      {item.extend_approved_status_name == 'REJECTED' && (
                        <Image
                          source={IMAGES.IcReject}
                          style={{
                            height: 12,
                            width: 12,
                            alignSelf: 'center',
                          }}
                        />
                      )}
                      <AppText
                        style={{
                          fontSize: 12,
                          fontWeight: '500',
                          color: `${item.extend_approved_status_color}`,
                          fontStyle: 'italic',
                        }}>
                        {`${item.extend_approved_status_code}`}
                      </AppText>
                    </View>
                    {item.comment && (
                      <AppText
                        style={{
                          fontSize: 14,
                          fontWeight: '500',
                        }}>{`${item.comment}`}</AppText>
                    )}
                  </View>
                </View>
              ))
            ) : (
              <View>
                <View style={{flexDirection: 'row', alignItems: 'center'}}>
                  <Image
                    source={{
                      uri: 'https://meu.anawork.com' + historyUserData?.avatar,
                    }}
                    style={{width: 50, height: 50, borderRadius: 8}}
                  />
                  <View>
                    <AppText
                      style={{
                        fontSize: 16,
                        fontWeight: '500',
                        marginLeft: 10,
                      }}>{`${
                      OTDetail?.extend_approver_full_name ||
                      OTDetail?.extend_creator_full_name
                    }`}</AppText>
                    <View
                      style={{
                        flexDirection: 'row',
                        alignItems: 'center',
                        marginLeft: 8,
                      }}>
                      <Image source={IMAGES.IcYellowMinus} />
                      <AppText
                        style={{
                          fontSize: 12,
                          fontWeight: '500',
                          color: '#ffa117',
                        }}>
                        Đang chờ
                      </AppText>
                    </View>
                  </View>
                </View>
                {OTDetail?.approver_id == userDetails.id &&
                  OTDetail?.extend_approved_status_name === 'PENDING' && (
                    <View>
                      <KeyboardAvoidingView
                        behavior={Platform.OS === 'ios' ? 'padding' : 'height'}>
                        <TextInput
                          multiline={true}
                          numberOfLines={3}
                          placeholder="Nhập bình luận..."
                          value={comment}
                          onChangeText={text => {
                            setComment(text);
                          }}
                          style={{
                            borderWidth: 1,
                            marginTop: 10,
                            borderColor: 'lightgray',
                            borderRadius: 8,
                          }}
                        />
                      </KeyboardAvoidingView>
                    </View>
                  )}
              </View>
            )}
          </View>

          {OTDetail?.extend_approved_status_name === 'PENDING' && (
            <View
              style={{
                flexDirection: 'row',
                marginTop: 16,
                marginBottom: 16,
                alignItems: 'center',
              }}>
              <CheckBox
                disabled={false}
                value={toggleNextApprover}
                onValueChange={() => setToggleNextApprover(!toggleNextApprover)}
              />
              <AppText
                style={{
                  fontSize: 16,
                  fontWeight: '500',
                  marginLeft: 10,
                }}>
                Chọn người duyệt tiếp theo
              </AppText>
            </View>
          )}
          {myDirectorManagerList.length !== 0 ? (
            toggleNextApprover &&
            myDirectorManagerList.map((el, index) => (
              <View
                key={index}
                style={{
                  flexDirection: 'row',
                  alignItems: 'center',
                  justifyContent: 'space-between',
                }}>
                <View
                  style={{
                    flexDirection: 'row',
                    alignItems: 'center',
                  }}>
                  <Image
                    source={{
                      uri: 'https://meu.anawork.com' + el?.avatar,
                    }}
                    style={{width: 50, height: 50, borderRadius: 8}}
                  />
                  <View>
                    <AppText
                      style={{
                        fontSize: 16,
                        fontWeight: '500',
                        marginLeft: 10,
                      }}>{`${el?.extend_user_full_name}`}</AppText>
                    <AppText
                      style={{
                        fontSize: 12,
                        fontWeight: '500',
                        marginLeft: 10,
                      }}>
                      {`${el?.position} - ${el?.department}`}
                    </AppText>
                  </View>
                </View>
                <View>
                  <CheckBox
                    disabled={false}
                    value={toggleSelectedNextApprover}
                    onValueChange={() => {
                      setToggleSelectedNextApprover(
                        !toggleSelectedNextApprover,
                      );
                      setNextApproverId(!toggleNextApprover ? el?.id : '');
                    }}
                  />
                </View>
              </View>
            ))
          ) : (
            <AppText
              style={{
                fontSize: 12,
              }}>
              Không có người duyệt
            </AppText>
          )}
        </View>

        {/* Bình luận */}
        <View>
          <AppText style={[styles.modalTitle]}>Bình luận</AppText>
          {commentAttachmentList.length > 0 && (
            <View
              style={{
                marginTop: 8,
                marginBottom: 8,
                flexDirection: 'row',
                justifyContent: 'space-between',
              }}>
              <View style={{width: '15%'}}></View>
              <View style={{width: '84%'}}>
                {commentAttachmentList.map((imageItem, index) => (
                  <Image
                    key={index}
                    source={{uri: imageItem.uri}}
                    style={styles.imgUpload}
                  />
                ))}
              </View>
            </View>
          )}
          {commentList &&
            commentList?.length !== 0 &&
            commentList?.map((el, index) => (
              <View key={index} style={{marginTop: 5}}>
                <View
                  style={{
                    flexDirection: 'row',
                    marginTop: 16,
                  }}>
                  <Image
                    source={{
                      uri: 'https://meu.anawork.com' + el.extend_staff_avatar,
                    }}
                    style={{width: 50, height: 50, borderRadius: 8}}
                  />
                  <View>
                    <AppText
                      style={{
                        fontSize: 16,
                        fontWeight: '500',
                        marginLeft: 10,
                      }}>{`${el.extend_staff_full_name}`}</AppText>
                    <AppText
                      style={{
                        fontSize: 12,
                        fontWeight: '500',
                        marginLeft: 10,
                      }}>
                      {`${Moment(el.created_at).format('HH:mm - DD/MM/YYYY')}`}
                    </AppText>
                    <AppText
                      style={{
                        fontSize: 14,
                        fontWeight: '500',
                        marginLeft: 10,
                        marginTop: 8,
                      }}>{`${el.content}`}</AppText>
                  </View>
                </View>
                <View
                  style={{
                    flexDirection: 'row',
                    alignItems: 'center',
                    justifyContent: 'space-between',
                    marginLeft: 50,
                    marginTop: 12,
                  }}>
                  <TouchableOpacity
                    style={{
                      marginLeft: 10,
                      flex: 1,
                    }}
                    onPress={() => onPostNewLikeOfComment(el?.id)}>
                    <View
                      style={{
                        flexDirection: 'row',
                        alignItems: 'center',
                      }}>
                      <AppText>{`${el.number_of_like}`}</AppText>
                      <Image
                        source={IMAGES.IcLike}
                        style={{
                          width: 20,
                          height: 20,
                          borderColor: 'black',
                          marginLeft: 4,
                        }}
                      />
                    </View>
                  </TouchableOpacity>
                </View>
              </View>
            ))}
          <View>
            <View
              style={{
                flexDirection: 'row',
                alignItems: 'center',
                justifyContent: 'space-between',
              }}>
              <View
                style={{
                  width: '15%',
                }}>
                <Image
                  source={{
                    uri: 'https://meu.anawork.com' + userDetails?.avatar,
                  }}
                  style={{width: 50, height: 50, borderRadius: 8}}
                />
              </View>
              <View
                style={{
                  width: '84%',
                }}>
                <View>
                  <KeyboardAvoidingView
                    behavior={Platform.OS === 'ios' ? 'padding' : 'height'}>
                    <TextInput
                      multiline={true}
                      numberOfLines={2}
                      placeholder="Nhập bình luận ở đây..."
                      value={comment2}
                      onChangeText={text => {
                        setComment2(text);
                      }}
                      style={{
                        borderWidth: 1,
                        marginTop: 10,
                        borderColor: 'lightgray',
                        borderTopWidth: 0,
                        borderLeftWidth: 0,
                        borderRightWidth: 0,
                        borderBottomColor: '#5c65dc',
                        position: 'relative',
                      }}
                    />
                  </KeyboardAvoidingView>

                  <View style={{position: 'absolute', right: 8, bottom: 16}}>
                    <TouchableOpacity
                      onPress={() => {
                        onPostNewComment();
                        setComment2('');
                      }}>
                      <Image
                        source={IMAGES.IcSendMessage}
                        style={{width: 15, height: 15}}
                      />
                    </TouchableOpacity>
                  </View>
                </View>
                <View
                  style={{
                    flexDirection: 'row',
                    marginTop: 12,
                    marginBottom: 16,
                  }}>
                  <View style={{marginRight: 12}}>
                    <TouchableOpacity>
                      <Image source={IMAGES.IcTextEditor} />
                    </TouchableOpacity>
                  </View>
                  <View style={{marginRight: 12}}>
                    <TouchableOpacity>
                      <Image source={IMAGES.IcEmoji} />
                    </TouchableOpacity>
                  </View>
                  <View style={{marginRight: 12}}>
                    <TouchableOpacity
                      onPress={() =>
                        launchImageLibrary(
                          {
                            mediaType: 'photo',
                            includeBase64: true,
                          },
                          response => {
                            if (!response.didCancel) {
                              setCommentAttachmentList(response.assets);
                            }
                          },
                        )
                      }>
                      <Image source={IMAGES.IcAttachment} />
                    </TouchableOpacity>
                  </View>
                </View>
              </View>
            </View>
          </View>
        </View>
        {/**Action button */}
        <View
          style={{
            flexDirection: 'row',
            justifyContent: 'space-between',
            marginTop: 30,
            marginBottom: 40,
          }}>
          <TouchableOpacity
            onPress={() => {
              onClose();
            }}
            style={styles.btnCancel}>
            <AppText style={styles.blueTxt}>Đóng</AppText>
          </TouchableOpacity>
          {OTDetail?.approver_id !== userDetails.id &&
            OTDetail?.extend_approved_status_name === 'PENDING' && (
              <ButtonComponent
                style={[styles.btnDelete, {padding: 10}]}
                text={'Xóa yêu cầu'}
                textStyle={styles.whiteTxt}
                onPress={onDeleteRequest}
              />
            )}
          {OTDetail?.approver_id === userDetails.id &&
            OTDetail?.extend_approved_status_name === 'PENDING' && (
              <View style={{flexDirection: 'row'}}>
                <ButtonComponent
                  style={[styles.btnDelete, {padding: 10, marginRight: 10}]}
                  text={'Từ chối'}
                  textStyle={styles.whiteTxt}
                  onPress={onRejectOTVoucher}
                />
                <ButtonComponent
                  style={[styles.btnSubmit, {padding: 10}]}
                  text={'Duyệt yêu cầu'}
                  textStyle={styles.whiteTxt}
                  onPress={onApproverOTVoucher}
                />
              </View>
            )}
        </View>
      </ScrollView>
    </Modal>
  );
};

export default OverTimeModalDetail;