import React, { Component } from 'react';
import { SnackbarHOC } from 'educoder';
import {Link} from 'react-router-dom';
import {BrowserRouter as Router,Route,Switch} from 'react-router-dom';
import Loadable from 'react-loadable';
import Loading from '../../../Loading';
import { CNotificationHOC } from '../common/CNotificationHOC'
import { RouteHOC } from './common'

import locale from 'antd/lib/date-picker/locale/zh_CN';
import { WordsBtn, MarkdownToHtml, trigger, queryString, downloadFile } from 'educoder';
import axios from 'axios';
import Modals from '../../modals/Modals';
import CoursesListType from '../coursesPublic/CoursesListType';
import AccessoryModal from "../coursesPublic/AccessoryModal";
import PublishRightnow from './PublishRightnow'
import '../css/Courses.css'
import CBreadcrumb from '../common/CBreadcrumb'
import DownloadMessageysl from "../../modals/DownloadMessageysl";
import ConnectProject from './ConnectProject'
import { Spin } from 'antd'

//引入对应跳转的组件

//新建分组/普通作业
const NewWork = Loadable({
    loader: () => import('./NewWork'),
    loading:Loading,
})

const CommonWorkSetting = Loadable({
  loader: () => import('./CommonWorkSetting'),
  loading:Loading,
})
const CommonWorkList = Loadable({
  loader: () => import('./CommonWorkList'),
  loading:Loading,
})
const CommonWorkQuestion = Loadable({
  loader: () => import('./CommonWorkQuestion'),
  loading:Loading,
})
const CommonWorkAnswer = Loadable({
  loader: () => import('./CommonWorkAnswer'),
  loading:Loading,
})
const CommonWorkAppraise = Loadable({
  loader: () => import('./CommonWorkAppraise'),
  loading:Loading,
})

const CommonWorkPost = Loadable({
  loader: () => import('./CommonWorkPost'),
  loading:Loading,
})

const CommonWork = Loadable({
  loader: () => import('./commonWork'),
  loading:Loading,
})
class CommonWorkDetailIndex extends Component{
  constructor(props) {
    super(props)
    this.publishModal = React.createRef();
    this.endModal = React.createRef();
    this.state = {
      DownloadType:false,
      DownloadMessageval:undefined,
      donwloading:false,
    }
  }
  initWorkDetailCommonState = (data) => {
    this.setState({
        ...data
    })
  }
  goback = () => {
    let workId=this.props.match.params.workId;
		//
    if ( window.location.pathname.indexOf('appraise') == -1) {
      let category_id= this.state.category.category_id;
      this.props.toListPage(this.props.match.params, category_id)
    } else {
      this.props.toWorkListPage(this.props.match.params, workId)
    }
		// this.props.history.goBack()
  }

   // 补交附件
  Cancelvisible=()=>{
    this.setState({
      accessoryVisible:false
    })
  }

  addAccessory=()=>{
    this.setState({
      accessoryVisible:true
    })
  }
  setupdate = () => {

  }
  doWhenSuccess = () => {
    trigger('commonwork_fetch_all')
  }

  /// 确认是否下载
  confirmysl(url){
    axios.get(url+ '&export=true').then((response) => {
      if(response===undefined){
        return
      }
      if(response.data.status&&response.data.status===-1){

      }else if(response.data.status&&response.data.status===-2){
        if(response.data.message === "100"){
          // 已超出文件导出的上限数量(100 ),建议:

          this.setState({
            DownloadType:true,
            DownloadMessageval:100
          })
        }else {
          //因附件资料超过500M
          this.setState({
            DownloadType:true,
            DownloadMessageval:500
          })
        }
      }else {
        this.props.slowDownload(url)

        // this.props.showNotification(`正在下载中`);
        // this.setState({ donwloading: true })
        // downloadFile({
        //   url: url,
        //   successCallback: (url) => {
        //     this.setState({ donwloading: false })
        //     console.log('successCallback')
        //   },
        //   failCallback: (responseHtml, url) => {
        //     this.setState({ donwloading: false })
        //     console.log('failCallback')
        //   }
        // })
        // window.open("/api"+url, '_blank');
      }
    }).catch((error) => {
      console.log(error)
    });
  }

  Downloadcal=()=>{
    this.setState({
      DownloadType:false,
      DownloadMessageval:undefined
    })
  }
  bindRef = ref => { this.child = ref };

  // 关联项目
  openConnectionProject = (work) => {
    this.refs['connectProject'].openConnectionProject(work)
  }
  connectSuccess = () => {
    this.child.fetchData && this.child.fetchData()
  }

  cancelConnectionProject = (work) => {
    let workId=this.props.match.params.workId;
    let courseId=this.props.match.params.coursesId;

    const url = `/homework_commons/${work.homework_id}/student_works/cancel_relate_project.json`
    axios.get(url).then((response)=> {
      if (response.data.status == 0) {
        this.child.fetchData && this.child.fetchData()

        this.props.showNotification('取消关联成功')
      }
     }).catch((error)=>{
       console.log(error)
     })
  }
  // 关联项目 END

  render() {
    let {course_name, homework_name, homework_status, noTab
        , view_answer, author_name, category, work_id

        , end_immediately, publish_immediately, work_statuses, accessoryVisible
    } =this.state;
    const { current_user } = this.props

    let courseId=this.props.match.params.coursesId;
    let category_id= category && category.category_id;
    let category_name= category && category.category_name;

    let workId=this.props.match.params.workId;
    const studentWorkId = this.props.match.params.studentWorkId

    const isGroup = this.props.isGroup()
    const moduleName = !isGroup? "普通作业":"分组作业";
    const moduleEngName = this.props.getModuleName()

    const childModuleName = this.state.moduleName
    const commonHandler = {
        initWorkDetailCommonState: this.initWorkDetailCommonState,
        triggerRef: this.bindRef
    }
    const isAdmin = this.props.isAdmin()

    
    let exportParams = {}
    const isListModule = childModuleName == '作品列表';
    // 是列表页
    let params = {}
    if (isListModule) {
      // TODO
      if(this.child && this.child._getRequestParams) {
        params = this.child._getRequestParams() !== undefined ? this.child._getRequestParams() : {};
      }
    }
    // console.log("普通作业176176176");
    // console.log(params);
    let exportUrl = `/homework_commons/${workId}/works_list.zip?${queryString.stringify(params)}`
    let exportResultUrl = `/homework_commons/${workId}/works_list.xlsx?${queryString.stringify(params)}`
    return (
        <div>
          <PublishRightnow ref={this.publishModal} showActionButton={false} {...this.props} checkBoxValues={[workId]} 
                isPublish={true} doWhenSuccess={this.doWhenSuccess} checkBeforePost={this.saveWorkSetting}
                onToPublishClick={this.onToPublishClick}
          ></PublishRightnow>
          <DownloadMessageysl
            {...this.props}
            value={this.state.DownloadMessageval}
            modalCancel={this.Downloadcal}
            modalsType={this.state.DownloadType}
          />
          <PublishRightnow ref={this.endModal} showActionButton={false} {...this.props} checkBoxValues={[workId]} 
                isPublish={false} doWhenSuccess={this.doWhenSuccess}></PublishRightnow> 


          <div className="newMain clearfix worklist1">
            <div className={"educontent mt20"}>
              <style>{`
                .memoContent {
                  background: #fff;
                }
              `}</style>
              {current_user && <CBreadcrumb items={[
                { to: current_user&&current_user.first_category_url , name: course_name},
                { to: `/courses/${courseId}/${moduleEngName}/${category_id}`, name: category_name },
                window.location.pathname.indexOf('appraise') == -1 ? { } : { to: `/courses/${courseId}/${moduleEngName}/${workId}/list`, name: '作业详情' },
                // 1.	与上一条联动,当匿评他人作品时,TA人作品的作者真实姓名切换为“匿名”
                window.location.pathname.indexOf('appraise') == -1 ? { name: '作业详情' } : { name: author_name },
                // window.location.pathname.indexOf('appraise') == -1 ? { } : { to: `/courses/${courseId}/${moduleEngName}/${workId}/list`, name: '作品列表' },
                // { name: childModuleName }
              ]}></CBreadcrumb>}

              <div style={{ width:'100%',height:'52px'}} >
                <span className=" fl color-black summaryname" title={`${homework_name && homework_name.length > 36 ? homework_name : ''}`}
                    style={{height: 'auto'}}
                >
                   {homework_name}
                  {/* <Link to={"/courses/"+courseId+"/graduation"+"/graduation_tasks/"}>{homework_name}</Link> */}
                </span>
                <CoursesListType
                  typelist={homework_status}
                  typesylename={"mt12"}
                />
               

                {category && <a className="color-grey-6 fr font-16 ml30 mt5 mr20" onClick={this.goback} style={{ marginRight: '26px'}}>返回</a>}

                {this.state.update_atta &&
                <React.Fragment>
                    {this.state.accessoryVisible===true? <AccessoryModal
                    {...this.props}
                    modalname={"补交附件"}
                    visible={this.state.accessoryVisible}
                    Cancelname={"取消"}
                    Savesname={"确认"}
                    Cancel={this.Cancelvisible}
                    setupdate={this.setupdate}
                    seeworks={undefined}
                    reviseAttachmentUrl={`/student_works/${work_id || studentWorkId}/revise_attachment.json`}
                  />:""}
                  <a className={"fr color-blue font-16 mt7"} href={"javascript:void(0)"}
                    onClick={this.addAccessory}
                  >补交附件</a>
                </React.Fragment>

                }
              </div>

              { noTab !== true && <div className="stud-class-set bor-bottom-greyE floatSpinParent">
                <div className="mt10 clearfix edu-back-white poll_list pl5">
                  <Link 
                        onClick={() => this.setState({moduleName: '作品列表'})}
                        className={`${isListModule ? 'active' : '' } `}
                        to={`/courses/${courseId}/${moduleEngName}/${workId}/list`}>作品列表</Link>
                  <Link 
                        onClick={() => this.setState({moduleName: '作业描述'})}
                        className={`${childModuleName == '作业描述' ? 'active' : '' } `}
                        to={`/courses/${courseId}/${moduleEngName}/${workId}/question`}>作业描述</Link>
                  {view_answer == true && <Link 
                        onClick={() => this.setState({moduleName: '参考答案'})}
                        className={`${childModuleName == '参考答案' ? 'active' : '' } `} 
                        to={`/courses/${courseId}/${moduleEngName}/${workId}/answer`}>参考答案</Link>}

                  {this.props.isAdmin() ?
                  <Link
                        onClick={() => this.setState({moduleName: '设置'})}
                        className={`${childModuleName == '设置' ? 'active' : '' } `}
                        style={{paddingLeft:'38px'}}
                        to={`/courses/${courseId}/${moduleEngName}/${workId}/setting`}>设置</Link>:
                  ""
                  }
                  

                  {/* { this.props.tabRightComponents }  */}
                  <React.Fragment>
                    <style>{`
                        .drop_down_menu li a {
                            padding: 0px;
                            font-size: 14px;
                        }
                        .drop_down_menu {
                            width: 121px;
                        }
                        .drop_down_menu li {
                            overflow: visible;
                            width: 121px;
                        }
                        .drop_down_menu, .drop_down_normal {
                            padding-top: 10px;
                            padding-bottom: 8px;
                        }

                        .floatSpinParent .ant-spin-nested-loading {
                          float: right;
                        }
                        `}</style>
                        {this.props.isAdmin()? <Spin spinning={this.state.donwloading} style={{  }}>
                        <li className="li_line drop_down fr color-blue font-16 mr8 mt20" style={{"padding":"0 20px"}}>
                        导出<i className="iconfont icon-xiajiantou font-12 ml2"></i>
                        <ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}>
                            <li>

                              <a href={"javascript:void(0)"} className="color-dark"
                              	  onClick={() => this.confirmysl(exportResultUrl)}
                              >导出成绩</a>

                            </li>
                            <li>
                              <a href={"javascript:void(0)"} className="color-dark"
                              	  onClick={() => this.confirmysl(exportUrl)}
                              >导出作品附件</a>
                            </li>
                        </ul>
                        </li>
                        </Spin>:""}

                        {/* {isAdmin && <a className={"fr color-blue font-16"} href={exportUrl}>导出作品附件</a>}
                        {isAdmin && <a className={"fr color-blue font-16"} href={exportResultUrl}>导出成绩</a>} */}
                        {/*<a className={"fr color-blue font-16"}>导出</a>*/}
                        {end_immediately &&  <a className={"fr color-blue font-16"} onClick={() => { this.endModal.current.open() } }>立即截止</a>}
                        {publish_immediately && <a className={"fr color-blue font-16"} onClick={() => { this.publishModal.current.open() } } >立即发布</a>}

                        {/*<a className={"fr color-blue font-16"}>项目在线质量检测</a>*/}
                        {isAdmin && <a className={"fr color-blue font-16"} onClick={() => this.props.toEditPage(this.props.match.params, workId)}>编辑作业</a>}

                        { //
                        work_statuses && work_statuses.indexOf('关联项目') != -1 && 
                        <React.Fragment>
                          <ConnectProject ref="connectProject" {...this.props} connectSuccess={this.connectSuccess}></ConnectProject>
                          <WordsBtn style="blue" className={` font-16 fr`} onClick={() => this.openConnectionProject({ homework_id: workId })}>关联项目</WordsBtn>
                          <WordsBtn style="blue" className={` font-16 fr`} onClick={() => this.props.toCreateProject()}>创建项目</WordsBtn>
                        </React.Fragment>
                        }
                        
                        { //
                        work_statuses && work_statuses.indexOf('取消关联') != -1 && 
                        <WordsBtn style="blue" className={` font-16 fr`} onClick={() => this.cancelConnectionProject( {homework_id: workId} )}>取消关联</WordsBtn>
                        }

                        {work_statuses && work_statuses.indexOf('提交作品') != -1 && <a className={"fr color-blue font-16"} href={"javascript:void(0)"}
                            onClick={() => { this.props.toWorkPostPage(this.props.match.params)}}
                        >提交作品</a>}

                        { work_statuses && work_statuses.indexOf('补交作品') != -1 &&
                        <a className={"fr color-blue font-16"} href={"javascript:void(0)"}
                            onClick={() => { this.props.toWorkPostPage(this.props.match.params, null, true, work_id)}}>
                        补交作品</a> }

                        {work_statuses && work_statuses.indexOf('修改作品') != -1 && <a className={"fr color-blue font-16"} href={"javascript:void(0)"}
                            onClick={() => { this.props.toWorkPostPage(this.props.match.params, null, true, work_id)}}
                        >修改作品</a>}
                        {work_statuses && work_statuses.indexOf('补交附件') != -1 && 
                        <React.Fragment>
                        <AccessoryModal
                            {...this.props}
                            modalname={"补交附件"}
                            visible={accessoryVisible}
                            Cancelname={"取消"}
                            Savesname={"确认"}
                            Cancel={this.Cancelvisible}
                            setupdate={this.setupdate}
                            reviseAttachmentUrl={`/student_works/${work_id}/revise_attachment.json`}
                        />
                        <a className={"fr color-blue font-16"} href={"javascript:void(0)"}
                            onClick={this.addAccessory}
                        >补交附件</a>
                        </React.Fragment>
                        
                        }
                    </React.Fragment>

                </div>
            </div> }

                {/* 内容区 */}
                <Switch {...this.props}>
            
                    {/* --------------------------------------------------------------------- */}

                    {/* 作业设置 */}
                    {/* http://localhost:3007/courses/1309/homework/9300/setting */}
                    <Route exact path="/courses/:coursesId/common_homeworks/:workId/setting"
                        render={
                        (props) => (<CommonWorkSetting {...this.props} {...props} {...this.state} {...commonHandler}/>)
                        }
                    ></Route>

                    {/* 作品列表 */}
                    <Route exact path="/courses/:coursesId/common_homeworks/:workId/list"
                        render={
                        (props) => (<CommonWorkList ref="commonWorkList"  triggerRef={this.bindRef} {...this.props} {...props} {...this.state} {...commonHandler}/>)
                        }
                    ></Route>

                    {/* 作业问答 */}
                    <Route exact path="/courses/:coursesId/common_homeworks/:workId/question"
                        render={
                        (props) => (<CommonWorkQuestion {...this.props} {...props} {...this.state} {...commonHandler}/>)
                        }
                    ></Route>
                    <Route exact path="/courses/:coursesId/common_homeworks/:workId/answer"
                        render={
                        (props) => (<CommonWorkAnswer {...this.props} {...props} {...this.state} {...commonHandler}/>)
                        }
                    ></Route>


                    <Route exact path="/courses/:coursesId/group_homeworks/:workId/setting"
                        render={
                        (props) => (<CommonWorkSetting {...this.props} {...props} {...this.state} {...commonHandler}/>)
                        }
                    ></Route>

                    {/* 作品列表 */}
                    <Route exact path="/courses/:coursesId/group_homeworks/:workId/list"
                        render={
                        (props) => (<CommonWorkList triggerRef={this.bindRef} {...this.props} {...props} {...this.state}  {...commonHandler}/>)
                        }
                    ></Route>

                    {/* 作业问答 */}
                    <Route exact path="/courses/:coursesId/group_homeworks/:workId/question"
                        render={
                        (props) => (<CommonWorkQuestion {...this.props} {...props} {...this.state} {...commonHandler}/>)
                        }
                    ></Route>
                    <Route exact path="/courses/:coursesId/group_homeworks/:workId/answer"
                        render={
                        (props) => (<CommonWorkAnswer {...this.props} {...props} {...this.state} {...commonHandler}/>)
                        }
                    ></Route>
                </Switch>
            </div>
          </div>
        </div>
        
    )
  }
}

export default  ( CommonWorkDetailIndex) ;