import React, { Component } from 'react';
import AccountProfile from "../../modules/user/AccountProfile";
import { getImageUrl } from 'educoder'
import axios from 'axios';
import cookie from 'react-cookies';
import { notification , Dropdown ,Popover, Menu,Badge } from 'antd';
import { Link } from 'react-router-dom';

import LoginDialog from '../../modules/login/LoginDialog';
import HeadSearch from '../Component/HeadSearch';

import AddProjectModal from './AddProjectModal';
import '../../modules/tpm/TPMIndex.css';
import CheckProfile from '../Component/ProfileModal/Profile';

import './header.scss';
import NoticeContent from './NoticeContent';
import MainLogo from './img/logo.png';
// TODO 这部分脚本从公共脚本中直接调用

window._header_componentHandler = null;
// 非trustie链接则新开页跳转
const str = ['www.trustie.net','forgeplus.trustie.net','forum.trustie.net','testforgeplus.trustie.net']
class NewHeader extends Component {
  constructor(props) {
    super(props)
    this.state = {
      Addcoursestypes: false,
      tojoinitemtype: false,
      tojoinclasstitle: undefined,
      rolearr: ["", ""],
      Checkboxteacherchecked: false,
      Checkboxstudentchecked: false,
      Checkboxteachingchecked: false,
      Checkboxteachertype: false,
      Checkboxteachingtype: false,
      code_notice: false,
      RadioGroupvalue: undefined,
      submitapplications: false,
      isRender: false,
      showTrial: false,
      setevaluatinghides: false,
      occupation: 0,
      mydisplay: false,
      // headtypesonClickbool: false,
      // headtypess: "/",
      settings: null,
      visiblemyss: false,
      openSearch:false,
      visible:false,  //浮动消息框展示控制
    }
  }
  componentDidMount() {
    this.geturlsdata();
    window._header_componentHandler = this;

    try {
      window.sessionStorage.setItem("yslgeturls", JSON.stringify(window.location.href))
    } catch (e) {}
  }

  openNotification = (messge) => {
    notification.open({
      message: "提示",
      description:
        messge,
    });
  };

  componentWillReceiveProps(newProps, oldProps) {
    this.setState({
      user: newProps.user
    })
  }

  educoderlogin = () => {
    //登录账号
    if(window.location.pathname === "/"){
      window.location.href="/login";
    }else{
      this.setState({
        isRender: true
      })
    }
  }
  educoderloginysl = () => {
    //退出账号时清除登录页面的下次自动登录（用户再次打开登录页面时下次自动登录框不勾选）
    cookie.remove("autologin");
    //退出账号
    var url = `/accounts/logout.json`;
    axios.get((url)).then((result) => {
      if (result !== undefined) {
        window.location.href = "/";
      }
    }).catch((error) => {
      console.log(error);
    })
  }

  hideAddcoursestypes = () => {
    this.setState({
      Addcoursestypes: false
    })
  };
  HideAddcoursestypess = (i) => {
    this.setState({
      Addcoursestypes: false,
      mydisplay: true,
      occupation: i,
    })
  };
  ModalCancelsy = () => {
    this.setState({
      mydisplay: false,
    })
  };

  // 关闭
  cancelModulationModels = () => {
    this.setState({ isRenders: false })
  }

  setevaluatinghides = () => {
    this.setState({
      setevaluatinghides: true
    })
  }
  //修改登录方法
  Modifyloginvalue = () => {
    this.setState({
      isRender: false,
    })
  }

  hideAccountProfile = () => {
    this.setState({
      AccountProfiletype: false
    })
  };
  // headtypesonClick = (url, bool) => {
  //   this.setState({
  //     headtypess: url,
  //     headtypesonClickbool: bool,
  //   })
  // }
  //获取数据为空的时候
  gettablogourlnull = () => {
    this.setState({
      settings: undefined
    });
    var link = document.createElement('link'),
      oldLink = document.getElementById('dynamic-favicon');
    link.id = 'dynamic-favicon';
    link.rel = 'shortcut icon';
    link.href = "/react/build/./favicon.ico";
    if (oldLink) {
      document.head.removeChild(oldLink);
    }
    document.head.appendChild(link);
  };

  //获取数据的时候
  gettablogourldata = (response) => {
    document.title = response.data.setting.name;
    var link = document.createElement('link'),
      oldLink = document.getElementById('dynamic-favicon');
    link.id = 'dynamic-favicon';
    link.rel = 'shortcut icon';
    link.href = '/' + response.data.setting.tab_logo_url;
    if (oldLink) {
      document.head.removeChild(oldLink);
    }
    document.head.appendChild(link);
  }

  handleVisibleChanges = (boll) => {
    this.setState({
      visiblemyss: boll,
    })
  }

  geturlsdata = () => {
    let url = "/setting.json";
    axios.get(url).then((response) => {
      if (response && response.data) {
        this.setState({ settings: response.data.setting });
        localStorage.setItem('chromesetting', JSON.stringify(response.data.setting));
        localStorage.setItem('chromesettingresponse', JSON.stringify(response));
      } else {
        this.gettablogourlnull();
      }
    }).catch((error) => {
      this.gettablogourlnull();
    });
  }

  matchpaths = (url) => {
    const { match } = this.props;
    const isDev = window.location.port == 3007;
    const isdev2= isDev ?'https://testforgeplus.trustie.net':`https://${window.location.hostname}`;
    let str = "";
    if(url.indexOf("http")>-1){
      str = isdev2+match.url;
    }else{
      str = match.path;
    }
    if (url && (str === url || (str === url+'/'))) {
      return true
    }else {
      return false
    }
  }
  
  checkProfile=(url)=>{
    const { showCompeleteDialog , completeProfile } = this.props;
    if(!completeProfile){
      showCompeleteDialog && showCompeleteDialog();
    }else{
      window.location.href(url);
    }
  }

  addMenu=(list)=>{
    return(
      list && list.length >0 && 
      <div className="dropdownFlex">
        <Menu> 
          {
            list.map((item,key)=>{
              return(
                (item.name !=="加入课堂" && item.name !=="加入开发项目") && 
                <Menu.Item key={item.name+key}>
                  <CheckProfile {...this.props} sureFunc={()=>{window.location.href=item.url}}>{item.name}</CheckProfile>
                </Menu.Item>
              )
            })
          }
          <Menu.Item>
            <AddProjectModal {...this.props} showNotification={this.props.showNotification}/>
          </Menu.Item>
        </Menu>
      </div>
    )
  }

  renderMenu=(personal)=>{
    const { current_user } = this.props;
    return(
      <Menu className="currentMenu">
        <Menu.Item>
          <span className="currentName" title={current_user && current_user.username}>{current_user && current_user.username}</span>
        </Menu.Item>
          {
            personal && personal.length > 0 && personal.map((item,key)=>{
              return(
                <li key={key}><a href={item.url} target="_blank">{item.name}</a></li>
              )
            })
          }
          {/* <li><Link to={`/settings/profile`}>设置</Link></li> */}
        <Menu.Item><a onClick={() => this.educoderloginysl()}>退出</a></Menu.Item>
      </Menu>
    )
  }

  handleVisibleChange = visible => {
    this.setState({ visible });
  };

  render() {
    const { resetUserInfo ,showNotification,publicNav} = this.props;
    let current_user = this.props.user;
    let {
      AccountProfiletype,
      user,
      isRender,
      settings,
      visible,
    } = this.state;
    let search_url = settings && settings.common && settings.common.search;
    return (
      <div className={publicNav ? `newHeaders publicNav`:`newHeaders`} id="nHeader">
        <div className="headerContent">
          {isRender === true ?
            <LoginDialog
              {...this.props}
              {...this.state}
              Modifyloginvalue={() => this.Modifyloginvalue()}
            /> : ""}

          {AccountProfiletype === true ?
            <AccountProfile
              hideAccountProfile={() => this.hideAccountProfile()}
              {...this.props}
              {...this.state}
            /> : ""}
            <div style={{width:"78px"}}>
              {
                publicNav &&
                <a href={'https://www.ccf.org.cn/'} className={"fl"}>
                  <img src={MainLogo} alt="ccf" width="63px"/>
                </a>
              }
            </div>
            {
              settings && settings.nav_logo_url ?
              <a href={settings && settings.new_course.default_url} className={"fl mr50"}>
                <img alt="可控开源社区" className="logoimg" src={getImageUrl(`/${settings.nav_logo_url}`)}></img>
              </a>
              :
              ""
            }
          <div className="head-nav pr" id={"head-navpre1"}>
            {
              settings && settings.navbar && settings.navbar.length > 0 ?
              <ul id="header-nav">
                {
                  settings.navbar && settings.navbar.map((item, key) => {
                    var new_link = item.link;
                    // var user_login = current_user && current_user.login;
                    var is_hidden = item.hidden;
                    // if (new_link && (new_link.indexOf("courses") > -1 || new_link.indexOf("contests") > -1)) {
                    //   if (user_login) {
                    //     if (new_link.indexOf("courses") > -1) {
                    //       new_link = new_link.replace(/courses/g, user_login + "/courses")
                    //     } else if (new_link.indexOf("contests") > -1) {
                    //       new_link = new_link.replace(/contests/g, user_login + "/contests")
                    //     }
                    //   } else {
                    //     is_hidden = true
                    //   }
                    // }
                    // if (user_login && (new_link && new_link.indexOf("homes") > -1)) {
                    //   new_link = new_link.replace(/homes/g, user_login + "/user_activities")
                    // }
                    var waiLian = (new_link && str.filter(item=>new_link.indexOf(item)>-1) );
                    var wl = waiLian && waiLian.length>0;
                    return (
                      <li key={key} className={`${this.matchpaths(new_link) === true ? 'pr active' : 'pr'}`} style={{display:!is_hidden ? 'flex' : 'none'} }>
                        <a href={new_link} target={wl ? "_self":"_blank"}>{item.name}</a>
                      </li>
                    )
                  })
                }
              </ul>
            : ""
            }
          </div>
          <div className="head-right">
            { search_url && <HeadSearch {...this.props}/>}
            {
              current_user && (current_user.main_site || current_user.login) && (settings && settings.add && settings.add.length>0)?
              <Dropdown overlay={this.addMenu(settings && settings.add)} placement="bottomRight">
                <img src={require(`./img/add.png`)} alt="" width="16px" className="mr15 ml30"/>
              </Dropdown>:""
            }
            
            { (settings && settings.common && settings.common.notice) && (current_user && current_user.login)?
              <Popover
                overlayClassName="notice-popover"
                placement={`bottomRight`}
                content={<NoticeContent visible={visible} current_user={current_user} showNotification={showNotification} resetUserInfo={resetUserInfo}/>}
                visible={visible}
                onVisibleChange={this.handleVisibleChange}
                destroyTooltipOnHide
              >
                <Link to={"/settings/notice"} className="message-icon">
                  {current_user && <Badge count={current_user.message_unread_total}>
                    <img src={require(`./img/ring.png`)} alt="" width="16px" className="ml15 mr15"/>
                  </Badge>}
                </Link>
              </Popover>
              : ""
            }
          </div>
          {!user || (user && !user.login)  ?
            <span className="font-15 ml30">
              <a onClick={() => this.educoderlogin()} className="mr5 color-white">登录</a>
              {
                (settings && settings.common && settings.common.register) ?
                  publicNav ? 
                  <a href='/register' className="regBtn">立即注册</a>
                  :
                  <span><em className="vertical-line"></em><a className="ml5 color-white" href='/register'>注册</a></span>
                :""
              }
            </span>
            :
            <Dropdown placement={`bottomRight`} overlay={this.renderMenu(settings && settings.personal)}>
              <a href={`/${this.props.current_user  && this.props.current_user.login}`}>
                <img alt="头像" src={getImageUrl(`/${user.image_url}`)} className="currentImg"></img>
              </a>
            </Dropdown>
          }
        </div>
      </div>
    );
  }
}

export default NewHeader;
