import {Component, OnInit} from '@angular/core';
import {FormBuilder, Validators} from '@angular/forms';
import { BsModalRef } from 'ngx-bootstrap/modal';
import { FrameService } from '../../../../../core/service/frame.service';
import { AjaxService } from '../../../../../core/service/ajax.service';
import { MsgService } from '../../../../../core/service/msg.service';
import { FrameDetailComponent } from '../../../../frame/core/detail/frame.detail';

@Component({
  selector: 'app-layout-plan-interview-detail',
  templateUrl: './layout-plan-interview-detail.component.html',
  styleUrls: ['./layout-plan-interview-detail.component.scss']
})
export class LayoutPlanInterviewDetailComponent extends FrameDetailComponent implements OnInit {

  constructor(bsModalRef: BsModalRef, fb: FormBuilder) {
    super(bsModalRef);

    this.detailForm = fb.group({
      'group_name': [null, Validators.compose([Validators.required, Validators.minLength(2), Validators.maxLength(128)])],
      'ly_order': [null, Validators.compose([Validators.required, Validators.min(1), Validators.max(999)])],
      'appointment_type': [null],
      'exam_seconds': [null, Validators.compose([Validators.required, Validators.min(60), Validators.max(999)])],
      'std_sign_minutes': [null, Validators.compose([Validators.required, Validators.min(0), Validators.max(180)])],
      'province_flag': [null],
      'once_flag': [null],
      'pagerless_flag': [null],
      'pack_flag': [null],
      'room_extract_time':[null],
      'room_judge_num': [null, Validators.compose([Validators.required, Validators.min(1), Validators.max(10)])],
      'pack_std_num': [null, Validators.compose([Validators.min(1), Validators.max(99)])],
      'pack_std_max': [null, Validators.compose([Validators.min(1), Validators.max(99)])],

    });
  }

  initDefautEntity() {
    if (this.detailMode === 'add') {
      this.currentEntity = LayoutPlanInterviewDetailComponent.makeGroup();
    }
    this.currentEntity.group_type = 'Interview';
    for (const sb of this.ResponseArray) {
      if (sb.score_status === 'Active') {
        sb.checked = true;
      } else {
        sb.checked = false;
      }
    }
  }

  ngOnInit() {
  }

  saveGroup() {
    if (!this.validForm()) {
      return;
    }

    for (const sb of this.ResponseArray) {
      if (sb.group_order === undefined || sb.group_order < 0) {
        sb.group_order = 0;
      }
      if (sb.checked === true) {
        sb.score_status = 'Active';
      } else {
        sb.score_status = 'InActive';
      }
    }
    // 分组考试
    if (this.currentEntity.pack_flag === 'Active') {
      if (this.currentEntity.pack_std_num < 2) {
        MsgService.errorToastr('分组面试模式下，单次考生数量必须大于1！');
        return;
      }
      if (this.currentEntity.pack_std_max < this.currentEntity.pack_std_num) {
        MsgService.errorToastr('分组面试模式下，单次考生数量最大考生数不能小于标准考生数！');
        return;
      }
      if (this.currentEntity.room_wait_num < this.currentEntity.pack_std_max) {
        MsgService.errorToastr('分组面试模式下，场外候考人数不能小于分组最大人数！');
        return;
      }
    } else {
      this.currentEntity.pack_std_num = 1;
      this.currentEntity.pack_std_max = 1;
    }
    // 判断无纸化平评参数
    if (this.currentEntity.pagerless_flag === 'Active') {
      if (this.currentEntity.room_judge_num < 1){
        MsgService.errorToastr('评委数量不能小于1，请检查！');
        return;
      }
      if (this.currentEntity.judge_cache_num < 1) {
        MsgService.errorToastr('评委评分缓存数量不能小于1，请检查！');
        return;
      }


      if (this.currentEntity.room_print_num < 0) {
        this.currentEntity.room_print_num = 0;
      }

    }

    this.currentEntity.subject_json = JSON.stringify(this.ResponseArray);
    MsgService.confirmAlert('确定要将这些科目进行分组合并吗？', () => {
      AjaxService.request('layout/plan/group/union.htm', this.currentEntity, () => {
        MsgService.successAlert('面试科目分组合并操作成功！',  () => {
          this.closeWindow();
        });
      }, {RequestWithLoading: true});
    });
  }


  public static makeGroup() {
    return {
      // 预约模式
      appointment_type: 'InActive',
      // 桌贴默认使用准考证号
      aspect_num_flag: FrameService.getParamValue('LayoutWrittenAspectNum','Active'),
      // 默认不需要检录
      checkin_flag: 'InActive',
      // 每个考生需要时长（单位秒）
      exam_seconds: 180,
      // 默认评委待提交评分考生允许20个考生
      judge_cache_num: 20,
      // 编排顺序，默认1
      ly_order: 1,
      // 编排状态，都是未编排状态
      ly_status: 'Init',
      // 笔试用，是否进一次考场，就把所有考试考完
      once_flag: 'InActive',
      // 是否按组考试，默认不是
      pack_flag: 'InActive',
      // 默认分组最大人数 15人
      pack_std_max: 15,
      // 默认分组标准人数10人
      pack_std_num: 10,
      // 默认启用无纸化面试
      pagerless_flag: 'Active',
      // 是否需要将省内外考生分开编排
      province_flag: 'InActive',
      // 抽取考场的方式:默认平均，随机
      room_extract_type: 'AverageRandom',
      // 抽取考场的时间点
      room_extract_time: 'Checkin',
      // 默认评委为0，需要每个确认
      room_judge_num: 0,
      // 默认严格限制考生考场
      room_limit_flag: 'Active',
      // 考场时间限制，默认为天
      room_limit_type: 'Date',
      // 是否需要强制打印，如果为0，说明不强制打印，如果大于0，强制打印
      room_print_num: 0,
      // 允许门外候考的人数，默认1
      room_wait_num: 1,
      // 面试默认提前20分钟签到
      std_sign_minutes: 20,

      // 集中候考
      focus_flag: 'InActive',
      //冲突类型
      conflict_type: 1
    };
  }
}
