// withHooks
import { applyStyle } from 'esoftplay';

import { LibCollaps } from 'esoftplay/cache/lib/collaps/import';
import { LibCurl } from 'esoftplay/cache/lib/curl/import';
import { LibDialog } from 'esoftplay/cache/lib/dialog/import';
import { LibIcon } from 'esoftplay/cache/lib/icon/import';
import { LibInfinite } from 'esoftplay/cache/lib/infinite/import';
import { LibInput } from 'esoftplay/cache/lib/input/import';
import { LibKeyboard_avoid } from 'esoftplay/cache/lib/keyboard_avoid/import';
import { LibLoading } from 'esoftplay/cache/lib/loading/import';
import { LibNavigation } from 'esoftplay/cache/lib/navigation/import';
import { LibPicture } from 'esoftplay/cache/lib/picture/import';
import { LibProgress } from 'esoftplay/cache/lib/progress/import';
import { LibSlidingup } from 'esoftplay/cache/lib/slidingup/import';
import { LibStyle } from 'esoftplay/cache/lib/style/import';
import { LibUtils } from 'esoftplay/cache/lib/utils/import';
import { MarketEmpty } from 'esoftplay/cache/market/empty/import';
import { MarketHeader } from 'esoftplay/cache/market/header/import';
import { MarketImage_picker } from 'esoftplay/cache/market/image_picker/import';
import { MarketStyle } from 'esoftplay/cache/market/style/import';
import { UserClass } from 'esoftplay/cache/user/class/import';
import esp from 'esoftplay/esp';

import moment from 'esoftplay/moment';
import useSafeState from 'esoftplay/state';
import React, { useEffect, useRef } from 'react';
import { Text, TouchableOpacity, View } from 'react-native';


export interface MarketComplaint_discussArgs {
  url_complaint: string
}
export interface MarketComplaint_discussProps {

}

export interface CommunityItem {
  title: string
  value: string
  color?: string
}

export interface SolutionItem {
  text: string
  color?: string
}

function Item(props: CommunityItem) {
  return (
    <View style={{ flexDirection: 'row', justifyContent: 'space-between', marginBottom: 6 }}>
      <Text allowFontScaling={false} style={{ flex: 1, fontFamily: "SFProText", fontSize: 12, fontWeight: "bold", fontStyle: "normal", letterSpacing: 0, color: "#4b4b4b" }}>{props.title}</Text>
      <Text allowFontScaling={false} ellipsizeMode={'tail'} numberOfLines={2} style={{ flex: 1, fontFamily: "SFProText", fontSize: 10, fontWeight: "normal", fontStyle: "normal", letterSpacing: 0, color: props.color ? props.color : "#4b4b4b" }}>{props.value}</Text>
    </View>
  )
}

export default function m(props: MarketComplaint_discussProps): any {
  const user = UserClass.state().get()
  const { url_complaint } = LibNavigation.getArgsAll(props)
  const width = LibStyle.width * 0.7
  let textMsg = useRef('').current
  const input = useRef<LibInput>(null)
  const imagePicker = useRef<LibSlidingup>(null)
  const [upData, setUpData, getUpData] = useSafeState<any>([])
  const [data, setData, getData] = useSafeState<any>()
  const [config, setConfig] = useSafeState<any>({})
  const [isMerchant, setIsMerchant, getIsMerchant] = useSafeState(false)



  useEffect(() => {
    esp.log(url_complaint, 'kompalin');
    getComplaintDetail()
  }, [])

  function getComplaintDetail() {
    new LibCurl(url_complaint, null,
      (res, msg) => {
        setIsMerchant(res?.merchant_id == user?.merchant_id)
        getComplaintConfig(res?.id)
        setData(res)
      }, (err) => {
        esp.log(err);
      }, 1
    )
  }

  function getComplaintConfig(complaint_id: string) {
    new LibCurl('shop/order_complaint_config?complaint_id=' + complaint_id, null,
      (res) => {
        setConfig(res)
      }, (msg) => {
        esp.log(msg, 'msg');
      }, 1
    )
  }

  function callAdmin() {
    LibDialog.warningConfirm(esp.lang("market/complaint_discuss", "call_admin_tittle"), esp.lang("market/complaint_discuss", "call_admin_msg"), esp.lang("market/complaint_discuss", "call_admin_confirm"), () => {
      LibProgress.show(esp.lang("market/complaint_discuss", "call_admin_wait"))
      new LibCurl('shop/order_complaint_admin', { id: data?.id },
        (res, msg) => {
          getComplaintConfig(data?.id)
          LibProgress.hide()
        }, (msg) => {
          LibDialog.warning(esp.lang("market/complaint_discuss", "call_admin_failed"), msg?.message)
        }, 1
      )
    }, esp.lang("market/complaint_discuss", "call_admin_cancel"), () => { })
  }

  function sendMessage() {
    const data = getData()
    let post = {
      complaint_id: data?.id,
      message: textMsg
    }
    let newMsg = {
      id: "",
      complaint_id: data?.id,
      sender_id: user?.id,
      sender_name: user?.merchant_id == data?.merchant_id ? data?.merchant_name : data?.buyer_name,
      message: textMsg,
      file: "",
      created: moment().localeFormat("YYYY-MM-DD HH:mm"),
      message_alert: "",
      sender_image: user?.merchant_id == data?.merchant_id ? data?.merchant_image : user?.image
    }

    let _upData = [...getUpData()]
    _upData.unshift(newMsg)
    setUpData([..._upData])

    new LibCurl('shop/order_complaint_conversation', post,
      (res, msg) => {
        input.current?.setText('')
      }, (msg) => {
        esp.log(msg);
      }, 1
    )
  }

  function sendAttach(imageUrl: string): void {
    const data = getData()
    let fileName = imageUrl.split('/').splice(-1).pop()
    let post = {
      complaint_id: data.id,
      message: fileName?.toString(),
      file: imageUrl
    }
    let newMsg = {
      id: "",
      complaint_id: data.id,
      sender_id: user?.id,
      sender_name: user?.merchant_id == data.merchant_id ? data.merchant_name : data.buyer_name,
      message: "",
      file: imageUrl,
      created: moment().localeFormat("YYYY-MM-DD HH:mm"),
      message_alert: "",
      sender_image: user?.merchant_id == data.merchant_id ? data.merchant_image : user.image
    }

    let _upData = [...getUpData()]
    _upData.unshift(newMsg)
    setUpData([..._upData])

    new LibCurl('shop/order_complaint_conversation', post,
      (res, msg) => {
        input.current?.setText('')
        imagePicker.current?.hide()
        esp.log(res, msg);
      }, (msg) => {
        imagePicker.current?.hide()
        esp.log(msg);
      }, 1
    )
  }

  function solveComplaint() {
    const data = getData()
    let post: any = {
      complaint_id: data?.id,
    }
    if (getIsMerchant()) {
      post.merchant_id = user?.merchant_id
    }
    LibProgress.show(esp.lang("market/complaint_discuss", "solve_complaint_wait"))
    new LibCurl('shop/order_complaint_solve', post,
      (res, msg) => {
        esp.log(res, msg, 'suks');
        LibProgress.hide()
        LibNavigation.back()
      }, (msg) => {
        esp.log(msg, 'faild');
        LibProgress.hide()
        LibDialog.warning(esp.lang("market/complaint_discuss", "solv_complaint_failed"), msg?.message)
      }, 1
    )
  }

  function renderItems(item: any, i: number) {
    let isReceived = item?.sender_id == user?.id
    if (item?.message_alert != "") {
      return (
        <View style={{ paddingRight: !isReceived ? 66 : 16, paddingLeft: !isReceived ? 16 : 66, flexDirection: 'row', marginVertical: 10, transform: [{ scaleY: -1 }] }} >
          {isReceived && <View style={styleId_Z1Jp02R} />}
          <Text allowFontScaling={false} style={[styleId_Z5dnwz, { textAlign: !isReceived ? 'left' : 'right' }]}>{item.message_alert}</Text>
          {!isReceived && <View style={styleId_Z1Jp02R} />}
        </View>
      )
    } else if (item?.file != "" && item?.file != null) {
      return (
        <View style={{ paddingLeft: !isReceived ? 10 : 0, paddingRight: !isReceived ? 0 : 10, marginVertical: 5, flexDirection: 'row', transform: [{ scaleY: -1 }] }} >
          {
            !isReceived &&
            <LibPicture source={{ uri: item?.sender_image }} style={[styleId_Z1LkjDC, { backgroundColor: MarketStyle.colorPrimaryMarket }]} />
          }
          <View style={styleId_Z1Jp02R} >
            <View style={{ flexDirection: 'row', alignItems: 'flex-end', justifyContent: !isReceived ? 'flex-start' : 'flex-end' }} >
              <TouchableOpacity onPress={() => LibNavigation.navigate("lib/gallery", { image: item?.file })} >
                <LibPicture source={{ uri: item?.file }} style={styleId_Z1aVcaD} />
              </TouchableOpacity>
            </View>
          </View>
          {
            isReceived &&
            <LibPicture source={{ uri: item?.sender_image }} style={[styleId_Z1CqeUA, { backgroundColor: MarketStyle.colorPrimaryMarket }]} />
          }
        </View>
      )
    } else {
      return (
        <View style={{ paddingLeft: !isReceived ? 10 : 0, paddingRight: !isReceived ? 0 : 10, marginVertical: 5, flexDirection: 'row', transform: [{ scaleY: -1 }] }} >
          {
            !isReceived &&
            <LibPicture source={{ uri: item?.sender_image }} style={[styleId_Z1LkjDC, { backgroundColor: MarketStyle.colorPrimaryMarket }]} />
          }
          <View style={styleId_Z1Jp02R} >
            <View style={{ flexDirection: 'row', alignItems: 'flex-end', justifyContent: !isReceived ? 'flex-start' : 'flex-end' }} >
              <View style={[{ maxWidth: width, backgroundColor: 'white', padding: 10, borderRadius: 5, marginBottom: 4 }, LibStyle.elevation(2)]} >
                <View style={styleId_1o0sV7}>
                  <Text selectable selectionColor={MarketStyle.colorPrimaryMarket} allowFontScaling={false} style={styleId_Z1JlOEF} >{item?.message}</Text>
                </View>
                <View style={styleId_Z1XYpdE} >
                  <Text allowFontScaling={false} style={styleId_Z1VHWu2} >{item?.sender_name}</Text>
                  <Text allowFontScaling={false} style={styleId_ZSKo92} >{moment(item?.created).localeFormat('DD/MM/YYYY')}</Text>
                </View>
              </View>
            </View>
          </View>
          {
            isReceived &&
            <LibPicture source={{ uri: item?.sender_image }} style={[styleId_Z1CqeUA, { backgroundColor: MarketStyle.colorPrimaryMarket }]} />
          }
        </View>
      )
    }
  }

  if (!data) {
    return <LibLoading />
  }

  return (
    <LibKeyboard_avoid style={styleId_Z1Jp02R} >
      <View style={styleId_Z1Jp02R} >
        <MarketHeader
          onlyBack
          title={esp.lang("market/complaint_discuss", "header_title")} />
        <LibCollaps
          header={(show) => {
            return (
              <View style={styleId_1CGbE5}>
                <Text allowFontScaling={false} style={styleId_1J70Oe}>{esp.lang("market/complaint_discuss", "compaint_detail")}</Text>
                <LibIcon name={!show ? "chevron-down" : "chevron-up"} />
              </View>
            )
          }}>
          <View style={[styleId_UksTw, { width: LibStyle.width }]}>
            <Item title={esp.lang("market/complaint_discuss", "invoice")} value={data?.invoice_merchant} />
            <Item title={esp.lang("market/complaint_discuss", "member_solution")} value={data?.solution_buyer?.desc} />
            <Item title={esp.lang("market/complaint_discuss", "merchant_solution")} value={data?.solution_merchant?.desc} />
            <Item title={esp.lang("market/complaint_discuss", "total_money")} value={LibUtils.money(data?.total)} />
            <Text allowFontScaling={false} style={styleId_Z1JkzDR}>{esp.lang("market/complaint_discuss", "discuss_msg")}</Text>
          </View>
        </LibCollaps>

        {/* <LibCollaps
        header={(show) => {
          return (
            <View style={{ padding: 10, paddingTop: 0, marginLeft: 5, justifyContent: 'space-between', flexDirection: 'row', borderRadius: 5, backgroundColor: '#fff' }}>
              <Text allowFontScaling={false} style={styleId_1J70Oe}>Tips Penyelesaian Komplain</Text>
              <LibIcon name={!show ? "chevron-down" : "chevron-up"} />
            </View>
          )
        }}>
        <View style={{ width: LibStyle.width, padding: 15, paddingTop: 5, backgroundColor: '#fff' }}>
          <ItemSolution text='Silahkan kirimkan barang yang sudah anda terima kepada merchant' />
        </View>
      </LibCollaps> */}


        {/* {
        isMerchant && data?.solve == 1 &&
        <View style={{ marginHorizontal: 15 }} >
          <View style={{ flexDirection: 'row', alignItems: 'center' }} >
            <View style={{ width: 10, height: 10, borderRadius: 5, backgroundColor: MarketStyle.colorPrimaryMarket, marginRight: 10 }} />
            <Text allowFontScaling={false} style={styleId_Z1JlOEF} >{'Pastikan Barang Retur Sudah Diterima Sebelum Anda Mengembalikan Dana '}</Text>
          </View>
        </View>
      } */}
        <View style={{ flex: 1, transform: [{ scaleY: - 1 }] }} >
          <LibInfinite
            url={'shop/order_complaint_conversation?complaint_id=' + data.id}
            onDataChange={(data: any) => setUpData(data)}
            injectData={upData}
            refreshEnabled={false}
            isDebug={1}
            errorView={(e: string) => (<View style={applyStyle({ transform: [{ scaleY: - 1 }], alignItems: 'center', justifyContent: 'center' })} >
              <MarketEmpty msg={e} />
            </View>
            )}
            removeClippedSubviews={false}
            renderItem={renderItems}
          />
        </View>

        {
          data?.status?.id < 4 &&
          <View style={styleId_Z267DqM} >
            {
              config?.admin_join == 0 &&
              <TouchableOpacity onPress={callAdmin} style={[styleId_Z11u93o, { backgroundColor: MarketStyle.colorPrimaryMarket, width: LibStyle.width * 0.5 - 20 }]} >
                <LibIcon name="face-agent" color={'white'} size={18} />
                <Text allowFontScaling={false} style={styleId_Z2gqeln} >{esp.lang("market/complaint_discuss", "call_admin")}</Text>
              </TouchableOpacity>
            }
            {
              // isMerchant && data?.solve == 1 &&
              isMerchant &&
              <TouchableOpacity onPress={() => {
                LibDialog.warningConfirm(esp.lang("market/complaint_discuss", "solve_title"), esp.lang("market/complaint_discuss", "solve_msg"), esp.lang("market/complaint_discuss", "solve_confirm"), () => {
                  solveComplaint()
                }, esp.lang("market/complaint_discuss", "solve_cancel"), () => { })
              }} style={[styleId_Z11u93o, { backgroundColor: MarketStyle.colorPrimaryMarket, width: LibStyle.width * 0.5 - 20 }]} >
                <Text allowFontScaling={false} style={styleId_Z1kdQJ8} >{esp.lang("market/complaint_discuss", "refund")}</Text>
                <LibIcon name="send" color={'white'} size={18} />
              </TouchableOpacity>
            }
            {
              !isMerchant && data?.solve == 1 &&
              <TouchableOpacity onPress={() => {
                LibDialog.warningConfirm(esp.lang("market/complaint_discuss", "buyer_solve_title"), esp.lang("market/complaint_discuss", "buyer_solve_msg"), esp.lang("market/complaint_discuss", "buyer_solve_confirm"), () => {
                  solveComplaint()
                }, esp.lang("market/complaint_discuss", "buyer_solve_cancel"), () => { })
              }} style={[styleId_Z11u93o, { backgroundColor: MarketStyle.colorPrimaryMarket, width: LibStyle.width * 0.5 - 20 }]} >
                <Text allowFontScaling={false} style={styleId_Z1kdQJ8} >{esp.lang("market/complaint_discuss", "done_complaint")}</Text>
                <LibIcon name="check-all" color={'white'} size={18} />
              </TouchableOpacity>
            }
          </View>
        }

        <View style={styleId_Z12b2w7} >
          <View style={styleId_ZDMTpG} >
            <LibInput
              ref={input}
              base
              editable={!(data?.status?.id > 3)}
              placeholder={esp.lang("market/complaint_discuss", "input_msg")}
              defaultValue={data?.status?.id > 3 ? esp.lang("market/complaint_discuss", "complaint_done") : ''}
              onChangeText={(x) => { textMsg = x }}
              multiline
              allowFontScaling={false}
              style={styleId_ZAHQTx}
            />
            <TouchableOpacity disabled={data?.status?.id > 3} onPress={() => imagePicker.current!.show()} activeOpacity={1} style={styleId_Z1kOD2B} >
              <LibIcon name="paperclip" size={20} color='#999' />
            </TouchableOpacity>
          </View>
          <TouchableOpacity disabled={data?.status?.id > 3} onPress={() => {
            if (textMsg != '') {
              sendMessage()
            }
          }} activeOpacity={1} style={styleId_Z1IIrU} >
            <LibIcon name="send-circle" size={40} color='#999' />
          </TouchableOpacity>
        </View>

        <MarketImage_picker
          _ref={imagePicker}
          onFinish={(x: string) => {
            sendAttach(x)
          }}
        />

      </View >
    </LibKeyboard_avoid>
  )
}
const styleId_Z1Jp02R: any = { flex: 1 }
const styleId_Z5dnwz: any = { fontFamily: "SFProText", fontSize: 11, fontWeight: "normal", fontStyle: "normal", lineHeight: 16, letterSpacing: 0, color: "#a3a3a3" }
const styleId_Z1LkjDC: any = { marginRight: 6, width: 36, height: 36, borderRadius: 18, alignSelf: "flex-end" }
const styleId_Z1aVcaD: any = { width: 120, height: 180, borderRadius: 2 }
const styleId_Z1CqeUA: any = { marginLeft: 6, width: 36, height: 36, borderRadius: 18, alignSelf: "flex-end" }
const styleId_1o0sV7: any = { flexDirection: 'row', flexWrap: 'wrap' }
const styleId_Z1JlOEF: any = { fontFamily: "Arial", fontSize: 12, fontWeight: "normal", fontStyle: "normal", lineHeight: 15, letterSpacing: 0, color: "#909090", textAlign: 'left' }
const styleId_Z1XYpdE: any = { marginTop: 10, flexDirection: 'row', justifyContent: "space-between" }
const styleId_Z1VHWu2: any = { marginRight: 20, fontFamily: "Arial", fontSize: 10, fontWeight: "normal", fontStyle: "normal", lineHeight: 15, letterSpacing: 0, color: "#909090" }
const styleId_ZSKo92: any = { fontFamily: "Arial", fontSize: 10, fontWeight: "normal", fontStyle: "normal", lineHeight: 15, letterSpacing: 0, color: "#909090" }
const styleId_1CGbE5: any = { padding: 10, marginLeft: 5, justifyContent: 'space-between', flexDirection: 'row', borderRadius: 5, backgroundColor: '#fff' }
const styleId_1J70Oe: any = { fontFamily: "SFProText", fontSize: 14, fontWeight: "bold", fontStyle: "normal", letterSpacing: 0, color: "#4b4b4b" }
const styleId_UksTw: any = { padding: 15, backgroundColor: "#fff" }
const styleId_Z1JkzDR: any = { marginTop: 8, textAlign: 'center', fontFamily: "SFProText", fontSize: 12, fontStyle: "normal", letterSpacing: 0, color: "#4b4b4b" }
const styleId_Z267DqM: any = { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginBottom: 10, marginHorizontal: 15 }
const styleId_Z11u93o: any = { flexDirection: "row", alignItems: "center", borderRadius: 20, padding: 10, justifyContent: "center" }
const styleId_Z2gqeln: any = { fontFamily: 'Arial', fontSize: 12, paddingLeft: 10, color: 'white' }
const styleId_Z1kdQJ8: any = { fontFamily: 'Arial', fontSize: 12, paddingRight: 10, color: 'white' }
const styleId_Z12b2w7: any = { flexDirection: 'row', alignItems: 'center', marginHorizontal: 10, marginBottom: 10, marginTop: 5, backgroundColor: 'white' }
const styleId_ZDMTpG: any = { flexDirection: 'row', flex: 1, borderWidth: 1, borderColor: '#999', height: 36, borderRadius: 18, justifyContent: 'center' }
const styleId_ZAHQTx: any = { flex: 1, marginHorizontal: 10 }
const styleId_Z1kOD2B: any = { alignItems: 'center', justifyContent: 'center', marginHorizontal: 10 }
const styleId_Z1IIrU: any = { marginLeft: 5, alignItems: 'center', justifyContent: 'center' }