import { Component, OnInit,ViewChild,ElementRef ,HostListener} from '@angular/core';
import { ActivatedRoute,Router } from "@angular/router";
import { MyService } from '../../my.service';
import { LifeCommonService } from "../../../common/life-common.service";


@Component({
  selector: 'ydlife-personal-statement',
  templateUrl: './personal-statement.component.html',
  styleUrls: ['./personal-statement.component.scss']
})
export class PersonalStatementComponent implements OnInit {
  @ViewChild('autofocusFlag') elementView: ElementRef;
  @ViewChild('contract') toastContent:ElementRef;
  //判断是个人声明还是合同确认
  type:any;
  hiringBasicInfoId:any;
  dropOptionsInfoList:Array<any>;
  isNeedAlert: boolean;
  dialogInfo: any;
  autofocusFlag:boolean;
  dropOptionsInfoListParam:Array<any> = [];
  contractTermsList:Array<any>;
  everWork:string;
  //判断曾经报聘是否可点
  everWorkFlag:boolean = false;
  isShow: boolean;
  curTitle:any;
  curContract:any;
  curContractId:number;
  isAllAgree:boolean = false;
  contractTermsConfirmsListParm:Array<any>;
  approvalIdentity:any;
  approveStatus:any;
  agreeBtnShow:boolean = false;
  constructor(private myService: MyService, 
    private activatedRoute: ActivatedRoute,
    public lifeCommonService: LifeCommonService,
    private router: Router) { }

  ngOnInit() {
    this.type = this.activatedRoute.snapshot.data[0]['type'];
    const title = this.activatedRoute.snapshot.data[0]['title'];
    this.lifeCommonService.setTitle(title);
    this.hiringBasicInfoId = this.activatedRoute.snapshot.queryParams.hiringBasicInfoId?this.activatedRoute.snapshot.queryParams.hiringBasicInfoId:null;
    this.approvalIdentity = this.activatedRoute.snapshot.queryParams.approvalIdentity?this.activatedRoute.snapshot.queryParams.approvalIdentity:null;
    if(this.type=="personal_statement"){
      this.dropOptionsQuery();
    }else{
      this.queryContractTerms();
    }
    this.queryWholeInfo(this.hiringBasicInfoId);
    
  }

  ngOnChanges(){
  
  }

  next(){
    if(this.type == 'personal_statement'){
      this.savePersonalStatements();
    }else if(this.type == 'contract'){
      this.saveContractTermsConfirms();
      if(!this.isAllAgree){
        this.openPopInfo('请详细阅读全部条款！')
        return;
      }
      this.router.navigate(['/signature'],{ queryParams: { hiringBasicInfoId:this.hiringBasicInfoId} });
    }
  }

  dropOptionsQuery(){
    this.myService.dropOptionsQuery({code:'EHiring_Personal_Statements'}).subscribe((res)=>{
      if(res['success']){
        this.dropOptionsInfoList = res['data']['dropMasterInfoList'][0]['dropOptionsInfoList'];
        this.dropOptionsInfoList.forEach((item)=>{
          item.status = 0;
          item.userInput = null;
        })
      }else{
        this.openPopInfo(res['message']);
      }
    })
  }

   // 打开弹窗
   openPopInfo(message) {
    this.isNeedAlert = true;
    this.dialogInfo = {
      title: null,
      content: { value: message, align: 'center' },
      footer: [{ value: '我知道了', routerLink: '', className: 'weui-dialog__btn_primary' }],
    };
  }

  //选择个人声明
  selectStatements(personalStatements){
    if(!this.approvalIdentity && this.approveStatus==null){
      if( personalStatements.status ==1){
        personalStatements.status = 0;
      }else{
        personalStatements.status = 1;
      }
      if(personalStatements.id == '241'){
        if(personalStatements.status == 1){
          this.everWorkFlag = true;
          //点击曾经报聘输入报聘自动获取焦点
          setTimeout(() => {
            this.elementView.nativeElement.focus();
          }, 500);
        }else{
          this.everWork = null;
          this.everWorkFlag = false;
        }
      }
    }
    
  }

  savePersonalStatements(){
    this.dropOptionsInfoListParam = [];
    for(let i=0;i<this.dropOptionsInfoList.length;i++){
      this.dropOptionsInfoList[i]['mdDropOptionName'] = this.dropOptionsInfoList[i]['dropOptionName'];
      this.dropOptionsInfoList[i]['mdDropOptionId'] = this.dropOptionsInfoList[i]['id'];
      if(this.dropOptionsInfoList[i]['id'] =='241'){
        this.dropOptionsInfoListParam.push({
          mdDropOptionName:this.dropOptionsInfoList[i]['dropOptionName'],
          mdDropOptionId:this.dropOptionsInfoList[i]['id'],
          status:this.dropOptionsInfoList[i]['status'],
          userInput:this.everWork?this.everWork:null
        })
      }else{
        this.dropOptionsInfoListParam.push({
          mdDropOptionName:this.dropOptionsInfoList[i]['dropOptionName'],
          mdDropOptionId:this.dropOptionsInfoList[i]['id'],
          status:this.dropOptionsInfoList[i]['status'],
          userInput:null
        })
      }
    }
    const param = {
      hiringBasicInfoId:this.hiringBasicInfoId,
      personalStatementList:this.dropOptionsInfoListParam
    }
    this.myService.savePersonalStatements(param).subscribe((res)=>{
      if(res['success']){
        this.router.navigate(['/contract'],{ queryParams: { hiringBasicInfoId:this.hiringBasicInfoId} });
      }else{
        this.openPopInfo(res['message']);
      }
    })
  }
  
  queryContractTerms(){
    this.myService.queryContractTerms().subscribe((res)=>{
      if(res['success']){
        this.contractTermsList = res['data']['contractTermsList'];
        this.contractTermsList.forEach((item)=>{
          item.confirmStatus = 0;
        })
      }
    })
  }

  // 关闭弹窗
  getPopInfo() {
    this.isNeedAlert = false;
  }

  readContract(contractItem){
    if(!this.approvalIdentity && this.approveStatus==null){
      if( contractItem.confirmStatus ==1){
        contractItem.confirmStatus = 0;
      }else{
        this.isShow = true;
        this.curContract = contractItem.termNote;
        this.curTitle = contractItem.termName;
        this.curContractId = contractItem.id;
      }
      this.isAllAgree = this.contractTermsList.every((item)=>{
        return item.confirmStatus == 1;
      });
    }
    
  }

  //同意合同条款
  agree() {
    if(this.agreeBtnShow == true){
      this.isShow = false;
      for(let i=0;i<this.contractTermsList.length;i++){
        if(this.curContractId == this.contractTermsList[i]['id']){
          this.contractTermsList[i]['confirmStatus'] = 1;
        }
      }
      this.isAllAgree = this.contractTermsList.every((item)=>{
        return item.confirmStatus == 1;
      })
    }
    
  }

  saveContractTermsConfirms(){
    this.contractTermsConfirmsListParm = [];
    for(let i=0;i<this.contractTermsList.length;i++){
      this.contractTermsConfirmsListParm.push({
        contractTermId:this.contractTermsList[i]['id'],
        confirmStatus:this.contractTermsList[i]['confirmStatus']
      })
    }
    const param = {
      hiringBasicInfoId:this.hiringBasicInfoId,
      contractTermsConfirmsList:this.contractTermsConfirmsListParm
    }
   this.myService.saveContractTermsConfirms(param).subscribe((res)=>{
    if(res['success']){

    }else{
      this.openPopInfo(res['message']);
    }
   })
  }

  async queryWholeInfo(hiringBasicInfoId){
    await this.queryContractTerms();
    this.myService.queryWholeInfo({hiringBasicInfoId:hiringBasicInfoId}).subscribe( (res)=>{
      if(res['success']){
        this.approveStatus = res['data']['hiringBasicInfo']['approveStatus'];
        if(this.type=="personal_statement"){
          if(res['data']['hiringPersonalStatementsList'].length >0){
            this.dropOptionsInfoList = res['data']['hiringPersonalStatementsList'];
            for(let i=0;i<this.dropOptionsInfoList.length;i++){
              this.dropOptionsInfoList[i]['dropOptionName'] = this.dropOptionsInfoList[i]['mdDropOptionName'];
              this.dropOptionsInfoList[i]['id'] = this.dropOptionsInfoList[i]['mdDropOptionId'];
              if(this.dropOptionsInfoList[i]['status'] == 1 && this.dropOptionsInfoList[i]['id']== '241'){
                this.everWorkFlag = true;
                this.everWork =  this.dropOptionsInfoList[i]['userInput'];
              }else{
                this.everWorkFlag = false;
              }
            }
          }
        }
        if(this.type == 'contract'){
          let hiringContractTermsConfirmsList = res['data']['hiringContractTermsConfirmsList'];
          for(let i=0;i<hiringContractTermsConfirmsList.length;i++){
            for(let j=0;j<this.contractTermsList.length;j++){
              if(hiringContractTermsConfirmsList[i]['contractTermId'] == this.contractTermsList[j]['id']){
                this.contractTermsList[j]['confirmStatus'] = hiringContractTermsConfirmsList[i]['confirmStatus'];
              }
            }
          }
          this.isAllAgree = this.contractTermsList.every((item)=>{
            return item.confirmStatus == 1;
          })
        }
      }
    })
  }

  onScroll(event){
    let scrollTop = this.toastContent.nativeElement.scrollTop;
    let clientHeight = this.toastContent.nativeElement.clientHeight;
    let scrollHeight = this.toastContent.nativeElement.scrollHeight ;
    if(scrollHeight > clientHeight && scrollTop + clientHeight === scrollHeight) {
     setTimeout(() => {
      this.agreeBtnShow = true;
     }, 10000);
    }
  }

  viewNext(){
    if(this.type == 'personal_statement'){
      this.router.navigate(['/contract'],{ queryParams: { hiringBasicInfoId:this.hiringBasicInfoId,approvalIdentity:this.approvalIdentity} });
    }
    if(this.type == 'contract'){
      this.router.navigate(['/signature'],{ queryParams: { hiringBasicInfoId:this.hiringBasicInfoId,approvalIdentity:this.approvalIdentity} });
    }
  }

  goBack(){
    history.go(-1)
  }
}
