import React,{ Component } from "react";
import { Input, Checkbox, Menu,Pagination,Spin} from "antd";
import {Link} from 'react-router-dom';
import CourseLayoutcomponent from '../../common/CourseLayoutComponent';
import Titlesearchsection from '../../common/titleSearch/TitleSearchSection';
import HomeworkModal from "../../coursesPublic/HomeworkModal";
import { WordsBtn } from 'educoder';
import axios from 'axios';
import moment from 'moment';
import GraduateTaskItem from './GraduateTaskItem';
import TaskPublishModal from "./TaskPublishModal";
import Modals from '../../../modals/Modals';
import UseBank from "../../busyWork/UseBank";
import '../../css/members.css';
import '../style.css';


class GraduationTasks extends Component{
  constructor(props){
    super(props);
    this.state = {
      searchValue: '',
      checkAllValue: false,
      checkBoxValues: [],
      all_count:undefined,
      course_identity:undefined,
      course_public:undefined,
      tasks:[],
      page:1,
      search:"",
      order:null,
      selectpage:"",
      isSpin:false,
			typs:undefined,
			starttimes:undefined,

    }
  }
  fetchAll = (search,page,order,count) => {

    const cid = this.props.match.params.coursesId


    const url = `/courses/${cid}/graduation_tasks.json`
    axios.get(url,{
      params: {
        search:search,
        page:page,
        order:order,
        count:count
      }
    }).then((response)=>{
      // console.log(response)
      if(response.status===200){
        this.setState({
          all_count:response.data.all_count,
          course_public:response.data.course_public,
          tasks:response.data.tasks,
          unpublished_count:response.data.unpublished_count,
          published_count:response.data.published_count,
          isSpin:false
        })
      }
    }).catch(function (error) {
      console.log(error);
    });

  }
  componentDidMount = () => {
    this.setState({
      isSpin:true
    })
    this.fetchAll("",1,"",15)

  }
  cancelmodel=()=>{

    this.setState({
      Modalstype:false,
      Loadtype:false,
      Modalstopval:"",
      ModalCancel:"",
      ModalSave:"",
    })

  }

  savedelete=()=>{
    this.setState({
      Modalstype:false,
    })
    let {checkAllValue,checkBoxValues,search,page,order} = this.state;
    // let all_check;
    // if(checkAllValue===true){
    //   all_check=1
    // }else{
    //   all_check=0
    // }
    // all_check: all_check
    const cid = this.props.match.params.coursesId
    const url = `/courses/${cid}/graduation_tasks/multi_destroy.json`
    axios.delete(url, { data: {
        task_ids: checkBoxValues,
      }})
      .then((response) => {
        if (response.data.status == 0) {
          // {"status":1,"message":"删除成功"}
          this.fetchAll(search,page,order)
          this.setState({
            Modalstype:true,
            Modalstopval:response.data.message,
            ModalsBottomval:"",
            ModalSave:this.cancelmodel,
            Loadtype:true,
            checkBoxValues:[],
            checkAllValue:false
          })
        }
      })
      .catch(function (error) {
        console.log(error);
      });

  }

  testonSelect=()=>{
    let {checkBoxValues,checkAllValue}=this.state;

    if(checkAllValue===false){
       if(checkBoxValues.length===0){
        return true
       }
    }

  }

  noSelect=()=>{
    // this.setState({
    //   Modalstype:true,
    //   Loadtype:true,
    //   Modalstopval:"请选择你要操作的任务",
    //   ModalSave:this.cancelmodel,
    // })

    this.props.showNotification("请选择你要操作的任务");
  }


  onDelete = () => {

   let selectnum= this.testonSelect();
    if(selectnum===true){
      this.noSelect();
      return
    }


    this.setState({
      Modalstype:true,
      Modalstopval:"是否确认删除?",
      ModalCancel:this.cancelmodel,
      ModalSave:this.savedelete,
    })

  }
  ActionPoll = () => {

    let selectnum= this.testonSelect();
    if(selectnum===true){
      this.noSelect();
      return
    }
  let {search,page,order,count} =this.state;
    const cid = this.props.match.params.coursesId
    //加入题库
    let url=`/courses/${cid}/graduation_tasks/add_to_bank.json`;
    axios.post((url), {
      task_ids: this.state.checkBoxValues
    })
        .then((result)=>{
          if(result.data.status==0){
            this.props.showNotification(`${result.data.message}`);
            this.fetchAll(search,page,order,15)
          }
        }).catch((error)=>{
      console.log(error);
    })
  }

  saveonOpen=()=>{
    this.setState({
      Modalstype:false,
    })
    let {checkAllValue,checkBoxValues,search,page,order} = this.state;
    // let all_check;
    // if(checkAllValue===true){
    //   all_check=1
    // }else{
    //   all_check=0
    // }
    //   all_check: all_check

    const cid = this.props.match.params.coursesId
    const url = `/courses/${cid}/graduation_tasks/set_public.json`
    axios.post(url, {
        task_ids: checkBoxValues,
      })
      .then((response) => {
        if (response.data.status == 0) {
          // {"status":1,"message":"删除成功"}
          this.fetchAll(search,page,order)
          this.setState({
            Modalstype:true,
            Modalstopval:response.data.message,
            ModalsBottomval:"",
            ModalSave:this.cancelmodel,
            Loadtype:true,
            checkBoxValues:[],
            checkAllValue:false
          })
        }
      })
      .catch(function (error) {
        console.log(error);
      });
  }


  onOpen=()=>{
    let selectnum= this.testonSelect();
    if(selectnum===true){
      this.noSelect();
      return
    }

    this.setState({
      Modalstype:true,
      Modalstopval:"公开后非课堂成员也可以访问查看",
      ModalsBottomval:"是否确认公开?",
      ModalCancel:this.cancelmodel,
      ModalSave:this.saveonOpen,
    })
  }


  // onSticky = (message) => {
  //   const cid = this.props.match.params.coursesId
  //   const url = `/messages/${message.id}/sticky_top.json`
  //   axios.put(url, {
  //     course_id: cid,
  //   })
  //   .then((response) => {
  //     if (response.data.id) {
  //       // {"status":1,"message":"删除成功"}
  //       console.log('--- 置顶/取消置顶成功')
  //       this.fetchAll()
  //     }
  //   })
  //   .catch(function (error) {
  //     console.log(error);
  //   });
  // }
  // onItemClick = (item) => {
  //   const checkBoxValues = this.state.checkBoxValues.slice(0);
  //   const index = checkBoxValues.indexOf(item.id);
  //   if (index != -1) {
  //     _.remove(checkBoxValues, (listItem)=> listItem === item.id)
  //   } else {
  //     checkBoxValues.push(item.id)
  //   }
  //   this.onCheckBoxChange(checkBoxValues)
  // }

  onInputSearchChange = (e) => {
    this.setState({
      searchValue:e.target.value
    })

    if (this.timeoutHandler) {
      clearTimeout(this.timeoutHandler)
    }
    this.timeoutHandler = setTimeout(() => {
      this.fetchAll(this.state.searchValue)
    }, 1200)
  }

  onselectfifteen = () => {
    this.setState({
      Modalstype:true,
      Modalstopval:"选择条数不能大于15条",
      ModalSave:this.cancelmodel,
      Loadtype:true
    })
  }
  onCheckAll = (e) => {
    let {tasks,checkBoxValues,page} =this.state;

    this.setState({
      checkAllValue:e.target.checked,
      selectpage:page
    })
    let checkBoxValuess=[];
    if(e.target.checked===true){
      for (var list of checkBoxValues){
        checkBoxValuess.push(list)
      }
      for(var value of tasks){
        checkBoxValuess.push(value.task_id)
      }
      checkBoxValuess=[...new Set(checkBoxValuess)]
      if(checkBoxValuess.length>15){
        this.onselectfifteen()
        return
      }

      this.setState({
        checkBoxValues:checkBoxValuess
      })
    }else if(e.target.checked===false){
      this.setState({
        checkBoxValues:checkBoxValuess
      })
    }

  }

  onCheckBoxChange=(checkedValues)=>{

    let {checkBoxValues,checkAllValue,tasks} =this.state;
    let type=false;
    if(checkBoxValues<tasks){
      type=false
    }else if(checkBoxValues<tasks){
      type=true
    }
   if(checkBoxValues.length>15||checkedValues.length>15){
     this.onselectfifteen()
     return
   }
    this.setState({
      checkBoxValues: checkedValues,
      checkAllValue:type
    })


  }


  PaginationTask=(page)=>{

   let {search,order,selectpage,checkAllValue,checkBoxValues}=this.state;
   let selectpagetype=selectpage===page?true:false
     this.setState({
       page:page,
       checkAllValue:selectpagetype
     })

    this.fetchAll(search,page,order);

    let checkBoxValueslist=checkBoxValues;

    // if(checkAllValue===true){
    //   for(var value of tasks){
    //     checkBoxValueslist.push(value.task_id)
    //   }
    //   this.setState({
    //     checkBoxValues:checkBoxValueslist
    //   })
    // }

  }

  handleClick = (e) => {
    let {search,page}=this.state;

    this.setState({
      order: e.key,
      isSpin:true
    });

    let newkey=e.key;
    if(newkey==="null"){
      newkey="all"
    }

    this.fetchAll(search,page,newkey);
  }

  onPressEnter = (value) => {

    let {page,order}=this.state;
    this.setState({
      search:value
    })
    this.fetchAll(value,page,order);

  }


  //立即发布
  publish=()=>{

    let selectnum= this.testonSelect();
    if(selectnum===true){
      this.noSelect();
      return
    }
    // this.homeworkstart()
    let starttime= this.props.getNowFormatDates(1);
    let endtime=this.props.getNowFormatDates(2);
    this.setState({
      modalname:"立即发布",
      visible:true,
      Topval:"学生将立即收到毕设任务",
      // Botvalleft:"暂不发布",
      Botval:`本操作只对"未发布"的分班有效`,
      starttime:"发布时间:"+moment(new Date()).format("YYYY-MM-DD HH:mm"),
			starttimes:this.props.getNowFormatDates(1),
			typs:"start",
      endtime:"截止时间:"+endtime,
      Cancelname:"暂不发布",
      Savesname:"立即发布",
      Cancel:this.publishcanner,
      Saves:this.homepublish,
    })
  }

  publishcanner=()=>{
    this.setState({
      visible:false,
    })
  }

  homepublish=(ids,endtime)=>{
    let {checkAllValue,checkBoxValues} = this.state;
    // let all_check;
    // if(checkAllValue===true){
    //   all_check=1
    // }else{
    //   all_check=0
    // }
    // all_check:all_check
    const cid = this.props.match.params.coursesId
    let url = `/courses/${cid}/graduation_tasks/publish_task.json`;
    axios.post(url,{
      task_ids:checkBoxValues,
      group_ids: this.state.course_groupslist,
			end_time:endtime,
    }).then((response)=>{
      if (response.data.status == 0) {
        this.props.showNotification(`${response.data.message}`);
        this.setState({
          // Modalstype:true,
          // Modalstopval:response.data.message,
          // ModalSave:this.cancelmodel,
          // Loadtype:true,
          checkBoxValues:[],
          checkAllValue:false
        })
        this.publishcanner();
        this.useBankSuccess();
      }
    }).catch((error)=>{

    })
  }



  end=()=>{
    let selectnum= this.testonSelect();
    if(selectnum===true){
      this.noSelect();
      return
    }
    // this.homeworkstart()
    this.setState({
      modalname:"立即截止",
      visible:true,
			Topval:"学生将不能再提交作品",
      // Botvalleft:"暂不截止",
      Botval:`本操作只对"提交中"的分班有效`,
      Cancelname:"暂不截止",
      Savesname:"立即截止",
      Cancel:this.publishcanner,
      Saves:this.coursetaskend,
			typs:"end",
    })

  }
  // //毕设因为没有分班列表分班列表
  // homeworkstart=()=>{
  //   let coursesId=this.props.match.params.coursesId;
  //   let url="/courses/"+coursesId+"/all_course_groups.json";
  //
  //   axios.get(url).then((response) => {
  //
  //     if(response.status===200){
  //       this.setState({
  //         modaltype:response.data.course_groups===null||response.data.course_groups.length===0?2:1,
  //         course_groups:response.data.course_groups,
  //       })
  //     }
  //   }).catch((error) => {
  //     console.log(error)
  //   });
  //
  // }
  coursetaskend=()=>{
    let {checkAllValue,checkBoxValues} = this.state;
    // let all_check;
    // if(checkAllValue===true){
    //   all_check=1
    // }else{
    //   all_check=0
    // }
    //      all_check:all_check
    const cid = this.props.match.params.coursesId
    let url = `/courses/${cid}/graduation_tasks/end_task.json`;
    axios.post(url,{
      task_ids:checkBoxValues,
      group_ids: this.state.course_groupslist,
    }).then((response)=>{
      if (response.data.status == 0) {
        // this.setState({
        //   Modalstype:true,
        //   Modalstopval:response.data.message,
        //   ModalSave:this.cancelmodel,
        //   Loadtype:true,
        //   checkBoxValues:[],
        //   checkAllValue:false
        // })
        // this.publishcanner();

        this.props.showNotification(`${response.data.message}`);
        this.setState({
          // Modalstype:true,
          // Modalstopval:response.data.message,
          // ModalSave:this.cancelmodel,
          // Loadtype:true,
          checkBoxValues:[],
          checkAllValue:false
        })
        this.publishcanner();
        this.useBankSuccess();
      }
    }).catch((error)=>{

    })
  }
  // 题库选用成功后刷新页面
  useBankSuccess=()=>{
    let {search,page,order,all_count} = this.state;
    this.fetchAll(search,page,order,all_count)
  }
  getcourse_groupslist=(id)=>{
    this.setState({
      course_groupslist:id
    })
  }
  render(){

    let { searchValue, tasks, checkBoxValues, checkAllValue,all_count,course_public,page,
      Modalstype,
      Modalstopval,
      ModalCancel,
      ModalSave,
      ModalsBottomval,
      Loadtype,
      modaltype,
      modalname,
      visible,
      Topval,
      Topvalright,
      Botvalleft,
      Botval,
      starttime,
      endtime,
      Cancelname,
      Savesname,
      Cancel,
      Saves,
      course_groups,
      search,
      order
    } = this.state;
    //   this.fetchAll(search,page,order);
    const coursesId=this.props.match.params.coursesId;
    const category_id=this.props.match.params.Id;
    const graduationId=this.props.match.params.graduationId;
     // console.log(this.props.isCourseidentity()===isNotMember)
   // console.log(category_id)
    return(
      <React.Fragment>
        {/*提示*/}
        <Modals
          modalsType={Modalstype}
          modalsTopval={Modalstopval}
          modalCancel={ModalCancel}
          modalSave={ModalSave}
          modalsBottomval={ModalsBottomval}
          loadtype={Loadtype}
        />

        {/*立即发布*/}
        <HomeworkModal
          modalname={modalname}
          visible={visible}
          Topval={Topval}
          Topvalright={Topvalright}
          Botvalleft={Botvalleft}
          Botval={Botval}
          starttime={starttime}
					starttimes={this.state.starttimes}
					typs={this.state.typs}
          endtime={endtime}
          Cancelname={Cancelname}
          Savesname={Savesname}
          Cancel={Cancel}
          Saves={Saves}
          course_groups={this.state.course_groups}
          modaltype={this.state.modaltype}
          getcourse_groupslist={(id) => this.getcourse_groupslist(id)}

        />



        <TaskPublishModal ref="taskPublishModal"></TaskPublishModal>
        <style>{`
          .task_menu_ul{
              width: 550px;
          }
        `}</style>
        <Titlesearchsection
          title="毕设任务"
          searchValue={searchValue}
          onInputSearchChange={this.onInputSearchChange}
          firstRowRight={
            <React.Fragment>
              {/*{this.props.isAdmin() ?<WordsBtn style="blue" className="mr30" onClick={() => this.addDir()}>题库选用</WordsBtn>:""}*/}
              {/*{this.props.isAdmin() ?<a href={"/api/graduation_tasks/"+category_id+"/tasks_list.xls"} className={"fr color-blue font-16"}>导出成绩</a> :""}*/}
              {this.props.isAdmin() ? <WordsBtn style="blue" className="mr10 fr font-16">
                <Link to={"/courses/" + coursesId + "/graduation_tasks/"+category_id+"/new"}>
                  <span className={"color-blue font-16"}>新建</span>
                </Link>
              </WordsBtn> : ""}

              {this.props.isAdmin() ?<UseBank {...this.props} {...this.state} object_type={"gtask"} useBankSuccess={this.useBankSuccess}></UseBank>:""}
            </React.Fragment>

          }

          // firstRowMid={
          //
          // }

          secondRowLeft={
            <div style={{"display":"inline-block", "marginTop": "22px"}}>
              <span>共{all_count}个毕设任务</span>
              <span style={{"marginLeft":"16px"}}>已发布:{this.state.published_count}个</span>
              {this.props.isAdmin()?<span style={{"marginLeft":"16px"}}>未发布:{this.state.unpublished_count}个</span>:""}
            </div>
          }

          secondRowBotton={
            <div className="fl mt6 task_menu_ul">
              <Menu mode="horizontal" defaultSelectedKeys="all" onClick={this.handleClick}>
                <Menu.Item key="all">全部</Menu.Item>
                {this.props.isAdmin()?<Menu.Item key="0">未发布</Menu.Item>:""}
                <Menu.Item key="1">提交中</Menu.Item>
                <Menu.Item key="4">补交中</Menu.Item>
                <Menu.Item key="2">评阅中</Menu.Item>
                <Menu.Item key="3">交叉评阅中</Menu.Item>
              </Menu>
            </div>
          }

          onPressEnter={this.onPressEnter}
          searchPlaceholder={"请输入名称进行搜索"}
          />

        
          {/* <GraduateTaskItem></GraduateTaskItem>

          <FilesListItem></FilesListItem> */}

        {this.props.isAdmin()? <div className="mt20 edu-back-white padding20-30">
          <div className="clearfix">
             <Checkbox className="fl" onChange={this.onCheckAll} checked={checkAllValue}>已选 {checkBoxValues.length} 个</Checkbox>
             <div className="studentList_operation_ul">

              <li className="li_line"><a className="color-grey-9" onClick={this.onDelete}>删除</a></li>
              <li className="li_line"><a className="color-grey-9" onClick={() => { this.publish() }}>立即发布</a></li>
              <li className="li_line"><a className="color-grey-9" onClick={() => { this.end() }}>立即截止</a></li>
              {course_public===true?<li className="li_line"><a className="color-grey-9" onClick={this.onOpen}>设为公开</a></li>:""}
              <li className="li_line"><a className="color-grey-9" onClick={()=>this.ActionPoll()}>加入题库</a></li>
            </div>
          </div>
        </div>:""}

        <style>{`
          .padding02010{
              padding: 10px 30px 0px 30px;
              cursor: pointer;
          }
          .ant-checkbox-group > div .boardsList {
              border-top: 1px solid transparent;
              padding: 10px 0px 20px!important;
          }
          .padding02010:hover{
              box-shadow: 0px 2px 6px rgba(51,51,51,0.09);
              opacity: 1;
              border-radius: 2px;
          }
        `}</style>
        <Spin size="large" spinning={this.state.isSpin}> <Checkbox.Group style={{ width: '100%' }} onChange={this.onCheckBoxChange} value={checkBoxValues}>
              { tasks.map((item, index) => {
                // console.log(item)
                return (
                  <div className="mt20 edu-back-white padding02010" key={index}>
                    <div className="clearfix">
                    <GraduateTaskItem
                      discussMessage={item}
                      isAdmin={this.props.isAdmin()}
                      isStudent={this.props.isStudent()}
                      isNotMember={this.props.isNotMember()}
                      checkBox={this.props.isAdmin()?<Checkbox value={item.task_id}></Checkbox>:""}
                      // onItemClick={this.onItemClick}
                      // onSticky={this.onSticky}
                      funlist={()=>this.fetchAll(search,page,order)}
                      coursename={this.props.coursedata&&this.props.coursedata.name}
                      graduationId={this.props.match.params.graduationId}
                      taskid={item.task_id}
                      coursesId={this.props.match.params.coursesId}
                      categoryid={this.props.match.params.Id}
                      workid={item.work_id}
                    ></GraduateTaskItem>
                  </div>
                 </div>
                )

              })
              }
            </Checkbox.Group>
        </Spin>

          {
            all_count > 15 && 
            <div className="mb40 edu-txt-center padding20-30" >
              <Pagination
                showQuickJumper
                defaultCurrent={1}
                pageSize={15}
                total={all_count}
                current={page}

                onChange={this.PaginationTask}
              />
            </div>
          }
          <div className="alltask edu-back-white"
               style={
                 {
                   display: all_count===undefined?'block' :all_count===0? 'block' : 'none'
                 }
               }
          >
          <div className="edu-tab-con-box clearfix edu-txt-center">
            <img className="edu-nodata-img mb20" src="https://www.educoder.net/images/educoder/nodata.png" />
            <p className="edu-nodata-p mb20">暂无数据哦~</p></div>
          </div>

        <div>

        </div>

      </React.Fragment>
      )
    }
}
export default GraduationTasks;