import React from "react";
import { Button, Checkbox, Form, Input, message, Select, Row, Col } from "antd";
import { useState } from "react";
import '../../new/index.scss';
import './index.scss';
import { registerUpdateBot } from "../../../../../../softbot/api";
import { useEffect } from "react";
const {Option} = Select;
// 修改注册bot的权限
function Jurisdiction(props){
  const {form, botDetail, setReload, match:{params:{id}}, current_user } = props;
  const {getFieldDecorator, validateFields , setFieldsValue, getFieldsValue } = form;
  const resource = [{value: 2, name: '无权限'}, {value: 0, name: '只读'}, {value: 1, name: '读写'}];
  const [codeSelectValue , setCodeSelectValue ] = useState(undefined);
  const [prSelectValue , setPrSelectValue ] = useState(undefined);
  const [ issueSelectValue , setIssueSelectValue ] = useState(undefined);

  useEffect(()=>{
    if(botDetail){
      const {limit_and_events:{juris_diction_code, juris_diction_pr, juris_diction_issue}} = botDetail
      setCodeSelectValue(juris_diction_code);
      setPrSelectValue(juris_diction_pr);
      setIssueSelectValue(juris_diction_issue);
    }
  }, [botDetail])

  function codeControl(e){
    setCodeSelectValue(e);
    return e;
  }

  function prControl(e){
    setPrSelectValue(e);
    return e;
  }

  function issueControl(e){
    setIssueSelectValue(e);
    return e;
  }

  // 修改注册bot的权限
  function submit(e){
    e.preventDefault();
    validateFields((err, fieldsValue)=>{
      if(err){
        return;
      }
      const {juris_diction_code, juris_diction_pr, event_code, event_pr, event_issue, juris_diction_issue} = fieldsValue;
      const params = {
        ...botDetail,
        bot_id: parseInt(id),
        limit_and_events: {
          event_code: event_code ? event_code.toString() : '',
          event_pr: event_pr ? event_pr.toString() : '',
          event_issue: event_issue ? event_issue.toString(): '',
          juris_diction_code,
          juris_diction_pr,
          juris_diction_issue
        },
        user_id: current_user && current_user.user_id,
      }
      registerUpdateBot(params).then(res=>{
        if(res && res.code === 200){
          message.success("更改成功");
          setReload(Math.random());
        }else{
          message.error(res.data)
        }
      })
    })
  }

  // 校验仓库访问权限
  function jurisDictionPrValidator(rule, value, callback){
    const {juris_diction_code, juris_diction_pr} = getFieldsValue();
    if(juris_diction_code === 2 && value === 2 && juris_diction_pr === 2){
      callback('请至少选择一个权限');
      return;
    }
    callback();
  }

  // 校验用户必选一个订阅事件
  function eventValidator(rule, value, callback){
    const {event_code, event_pr, event_issue} = getFieldsValue();
    if(event_code || event_pr || event_issue){
      callback();
    }else{
      callback("请至少选择一个订阅事件");
    }
  }

  return <Form className="createExploitForm jurisdictionBox" onSubmit={submit}>
    {botDetail && <div>
    <div className="resourceTitle font-16 pb15 mb10">仓库访问权限</div>
    <Form.Item label="代码库权限" className="resourceBox botItem dashedBorder">
      <div className="color-99">代码库git推送、分支的创建与删除</div>
      {getFieldDecorator("juris_diction_code",{initialValue: botDetail.limit_and_events.juris_diction_code, getValueFromEvent: codeControl})(
        <Select>
          {resource.map(item=>{return <Option value={item.value} key={item.value}>{item.name}</Option>})}
        </Select>
      )}
    </Form.Item>
    <div className="dashedBor"></div>
    <Form.Item label="合并请求(PR)权限" className="resourceBox botItem">
      <div className="color-99">合并请求的打开、关闭、编辑、分配</div>
      {getFieldDecorator("juris_diction_pr",{initialValue: botDetail.limit_and_events.juris_diction_pr, getValueFromEvent: prControl})(
        <Select>
          {resource.map(item=>{return <Option value={item.value} key={item.value}>{item.name}</Option>})}
        </Select>
      )}
    </Form.Item>
    <div className="dashedBor"></div>
    <Form.Item label="疑修(Issue)权限" className="resourceBox botItem">
      <div className="color-99">疑修的打开、关闭、编辑、分配、评论</div>
      {getFieldDecorator("juris_diction_issue",{rules:[{validator: jurisDictionPrValidator}],initialValue: botDetail.limit_and_events.juris_diction_issue, getValueFromEvent: issueControl})(
        <Select>
          {resource.map(item=>{return <Option value={item.value} key={item.value}>{item.name}</Option>})}
        </Select>
      )}
    </Form.Item>
    {(codeSelectValue !== resource[0].value || prSelectValue !== resource[0].value) && <div className="resourceTitle font-16 pb15 mb10">订阅事件</div>}
    {codeSelectValue !== resource[0].value && <Form.Item label="代码库事件" className="botItem width50 checkBox three dashedBorder">
      {getFieldDecorator("event_code", {
        initialValue: botDetail.limit_and_events.event_code ? botDetail.limit_and_events.event_code.split(',').map(item=>item = parseInt(item)) : [],
        rules:[{validator: (rule, value, callback)=>{eventValidator(rule, value, callback)}}]
      })(
        <Checkbox.Group>
          <Row>
            <Col span={16}><Checkbox value={0}>推送<br/><span className="color-99">git推送到存储库</span></Checkbox></Col>
            <Col span={8}><Checkbox value={1}>创建<br/><span className="color-99">创建分支或标签</span></Checkbox></Col>
            <Col span={16}><Checkbox value={2}>删除<br/><span className="color-99">删除分支或标签</span></Checkbox></Col>
          </Row>
        </Checkbox.Group>
      )}
    </Form.Item>}
    {(codeSelectValue !== resource[0].value && prSelectValue !== resource[0].value) && <div className="dashedBor"></div>}
    {prSelectValue !== resource[0].value && <Form.Item label="合并请求事件" className="botItem width50 checkBox">
      {getFieldDecorator("event_pr", {
        initialValue: botDetail.limit_and_events.event_pr ? botDetail.limit_and_events.event_pr.split(',').map(item=>item = parseInt(item)) : [],
        rules:[{validator: (rule, value, callback)=>{eventValidator(rule, value, callback)}}]
      })(
        <Checkbox.Group>
          <Row>
            <Col span={16}><Checkbox value={3}>合并请求<br/><span className="color-99">合并请求被打开、被关闭或被编辑</span></Checkbox></Col>
            <Col span={8}><Checkbox value={4}>合并请求分配<br/><span className="color-99">合并请求被分配或取消分配</span></Checkbox></Col>
            <Col span={16}><Checkbox value={6}>合并请求被评论<br/><span className="color-99">合并请求评论被创建或删除</span></Checkbox></Col>
          </Row>
        </Checkbox.Group>
      )}
    </Form.Item>}
    {(codeSelectValue !== resource[0].value || prSelectValue !== resource[0].value) && issueSelectValue !== resource[0].value && <div className="dashedBor"></div>}
    {issueSelectValue !== resource[0].value && <Form.Item label="疑修事件" className="botItem width50 checkBox three">
      {getFieldDecorator("event_issue",{
        initialValue: botDetail.limit_and_events.event_issue ? botDetail.limit_and_events.event_issue.split(',').map(item=>item = parseInt(item)) : [],
        rules:[{validator: (rule, value, callback)=>{eventValidator(rule, value, callback)}}]
      })(
        <Checkbox.Group>
          <Row>
            <Col span={16}><Checkbox value={7}>疑修<br/><span className="color-99">疑修已打开、已关闭、已重新打开或编辑</span></Checkbox></Col>
            <Col span={8}><Checkbox value={8}>疑修已指派<br/><span className="color-99">疑修已被指派或取消指派</span></Checkbox></Col>
            <Col span={16}><Checkbox value={9}>已标记疑修<br/><span className="color-99">疑修标记被更新或清除</span></Checkbox></Col>
            <Col span={8}><Checkbox value={10}>疑修评论<br/><span className="color-99">疑修评论被创建、编辑或删除</span></Checkbox></Col>
          </Row>
        </Checkbox.Group>
      )}
    </Form.Item>}
    <Form.Item className="mt30"><Button style={{width:"129px", height: '36px'}} type="primary" htmlType="submit">保存修改</Button></Form.Item></div>}
  </Form>
}
export default Form.create()(Jurisdiction);