import {
  Text,
  View,
  Dimensions,
  TouchableOpacity,
  Image as NativeImage,
  Alert,
} from "react-native";
import React, { useEffect, useState } from "react";
import { Image } from "expo-image";
import { useTailwind } from "tailwind-rn";
import { ListItem, Icon } from "@rneui/themed";
import { get } from "../../../utils/storeInfo";
import baseRequest from "../../../utils/baseRequest";
import { generateSignature } from "../../../utils/crypto";
import { useNavigation } from "@react-navigation/native";
import Banner from "../../../components/Banner";
import requireAPI from "../../../utils/requireAPI";
import * as Linking from "expo-linking";
import { goToPage } from "../../../utils/tools";
export default function HostList() {
  const navigation = useNavigation();
  const tailwind = useTailwind();
  const screenWidth = Dimensions.get("window").width;
  const [hostList, setHostList] = useState([]);
  const [bannerList, setBannerList] = useState([]);
  useEffect(() => {
    const getHostList = async () => {
      const apiUrl = process.env.EXPO_PUBLIC_API_URL;
      let api;
      api = "/api/activity_hot/list";
      const account = await get("account");
      try {
        const base = await baseRequest();
        const signature = await generateSignature({
          ...base,
        });
        const response = await fetch(`${apiUrl}${api}?signature=${signature}`, {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
          },
          body: JSON.stringify({
            ...base,
            mid: account.mid,
          }),
        });
        const data = await response.json();
        setHostList(data.data.list);
      } catch (error) {
        console.error(error);
      }
    };
    const getBannerList = async () => {
      try {
        const _data = await requireAPI(
          "POST",
          "/api/activity_banner/list",
          null,
          true
        );
        if (_data.ret === -1) {
          Toast.show({
            icon: "fail",
            content: _data.msg,
            position: "top",
          });
          return;
        }
        const bannerList = _data.data.list.map((item) => {
          const links = item?.hyperlinks;
          let link = null;
          if (links.length > 1) {
            link = links.filter((it) => it.inward_action_type === "app")[0]
              ?.url;
          } else {
            link = links[0]?.url;
          }
          return {
            link: {
              url: link,
              action: links[0]?.action,
            },
            url: item?.image.images[0]?.urls[0],
            id: item?.id,
          };
        });
        setBannerList(bannerList);
      } catch (error) {
        console.error(error);
      }
    };
    getHostList();
    getBannerList();
  }, []);
  return (
    <View style={tailwind("flex-1 px-4")}>
      <View style={tailwind("flex flex-row justify-between items-center")}>
        <Text style={tailwind("text-white text-xl font-medium")}>猜你想看</Text>
        <TouchableOpacity
          onPress={() => navigation.navigate("Stream")}
          style={tailwind("flex flex-row justify-between items-center")}
        >
          <Text style={tailwind("text-[#FFFFFF80] text-sm font-medium")}>
            查看更多
          </Text>
          <Icon
            type="ionicon"
            name="chevron-forward"
            size={14}
            color="white"
            onPress={() => navigation.goBack()}
          />
        </TouchableOpacity>
      </View>
      <View>
        {hostList.length > 0 &&
          hostList.map((item, index) => (
            <ListItem key={index} containerStyle={tailwind("p-0 bg-[#07050A]")}>
              <TouchableOpacity
                onPress={() => {
                  const links = item?.hyperlinks;
                  let link = null;
                  if (links.length > 1) {
                    link = links.filter((it) => it.action === "inward")[0]?.url;
                  } else {
                    link = links[0]?.url;
                  }
                  const linkAndParams = goToPage({
                    action: links[0]?.action,
                    url: link,
                  });
                  if (typeof linkAndParams === "string") {
                    if (
                      links[0]?.action === "webViewHeaderInward" ||
                      links[0]?.action === "webViewHeaderOutward"
                    ) {
                      navigation.navigate("WebWithHeader", {
                        title: "",
                        uri: linkAndParams,
                      });
                      return;
                    } else if (
                      links[0]?.action === "webViewWithOutHeaderInward" ||
                      links[0]?.action === "webViewWithOutHeaderOutward"
                    ) {
                      navigation.navigate("WebWithoutHeader", {
                        title: "",
                        uri: linkAndParams,
                      });
                      return;
                    }
                    try {
                      // 尝试启动微信客户端
                      Linking.openURL(linkAndParams).catch(() => {
                        // 启动微信客户端失败,弹出提示安装对话框
                        Alert.alert(
                          "错误提醒",
                          "打开链接失败,请返回重试或者联系在线客服",
                          [{ text: "确认", style: "cancel" }],
                          { cancelable: false }
                        );
                      });
                    } catch (error) {
                      // 启动微信客户端失败,继续加载URL
                      console.error(error);
                    }
                  } else {
                    navigation.navigate(...linkAndParams);
                  }
                }}
                style={tailwind("flex-row py-3")}
              >
                <Image
                  style={tailwind("w-12 h-12 rounded-full")}
                  source={item.image.images[0].urls[0]}
                  contentFit="cover"
                  cachePolicy="disk"
                />
                <View style={tailwind("ml-2 justify-around flex-1")}>
                  <View style={tailwind("flex flex-row items-center")}>
                    <Text
                      style={tailwind("text-base text-white font-medium")}
                      numberOfLines={1}
                      ellipsizeMode="tail"
                    >
                      {item.title}
                    </Text>
                    {index < 3 && (
                      <NativeImage
                        style={tailwind("ml-1")}
                        source={require("../../../assets/images/hot.png")}
                      />
                    )}

                    {!!item.age && (
                      <>
                        <View
                          style={tailwind(
                            "flex-row items-center py-0.5 px-2 ml-1 bg-[#FFFFFF1A] rounded-full"
                          )}
                        >
                          <NativeImage
                            source={
                              item.gender
                                ? require("../../../assets/icon/12DP/female.png")
                                : require("../../../assets/icon/12DP/male.png")
                            }
                          />
                          <Text
                            style={tailwind(
                              "text-white text-xs font-medium ml-0.5"
                            )}
                          >
                            {item.age}
                          </Text>
                        </View>
                        <View
                          style={tailwind(
                            "flex-row items-center py-0.5 px-2 ml-1 bg-[#FFFFFF1A] rounded-full"
                          )}
                        >
                          <NativeImage
                            source={require("../../../assets/icon/12DP/location.png")}
                          />
                          <Text
                            style={tailwind(
                              "text-white text-xs font-medium ml-0.5"
                            )}
                          >
                            {item.city}
                          </Text>
                        </View>
                      </>
                    )}
                  </View>
                  <Text
                    style={tailwind("text-sm text-[#FFFFFF80]")}
                    numberOfLines={1}
                    ellipsizeMode="tail"
                  >
                    {item.text}
                  </Text>
                </View>
              </TouchableOpacity>
            </ListItem>
          ))}
      </View>
      {/* Banner预留位置 */}
      <View style={tailwind("mt-4 mb-10")}>
        <Banner banners={bannerList} navigation={navigation} />
      </View>
    </View>
  );
}