import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { languages } from '../../../../services/languages.map';
import { CommonCompModule } from '../../../../services/common.modules';
import { NzSelectModule } from 'ng-zorro-antd/select';
import { ReactiveFormsModule } from '@angular/forms';
import { NzRadioModule } from 'ng-zorro-antd/radio';
import { NzUploadModule } from 'ng-zorro-antd/upload';
import { NzTagModule } from 'ng-zorro-antd/tag';
import { NzMessageService } from 'ng-zorro-antd/message';
import { NzModalService } from 'ng-zorro-antd/modal';
import { textbookServer } from '../../../../services/textbook';
import Parse from 'parse';
import {
  FormControl,
  FormGroup,
  NonNullableFormBuilder,
  Validators,
} from '@angular/forms';
import { CompUploadComponent } from '../../../../app/comp-upload/comp-upload.component';
import { NzInputModule } from 'ng-zorro-antd/input';
import * as major from '../../../../services/majors4.map';
import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';

import { BasicComponent } from '../create/basic/basic.component';

import { ChangeDetectorRef } from '@angular/core';
import { ViewChild } from '@angular/core';
import { MatAccordion, MatExpansionModule } from '@angular/material/expansion';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatButtonModule } from '@angular/material/button';
import { provideNativeDateAdapter } from '@angular/material/core';
import { ViewChildren, QueryList } from '@angular/core';
import { CreatedService } from '../../../../services/created.service';
import { NzCollapseModule } from 'ng-zorro-antd/collapse';
import { NzPopoverModule } from 'ng-zorro-antd/popover';


@Component({
  selector: 'app-basic',
  imports: [
    CommonCompModule,
    ReactiveFormsModule,
    NzSelectModule,
    NzRadioModule,
    NzUploadModule,
    NzInputModule,
    NzTagModule,
    CompUploadComponent,
    NzCheckboxModule,
    BasicComponent,
    MatButtonModule,
    MatExpansionModule,
    MatIconModule,
    MatFormFieldModule,
    MatInputModule,
    MatDatepickerModule,
    NzCollapseModule,
    NzPopoverModule
  ],
  standalone: true,
  templateUrl: './basic-in.component.html',
  styleUrls: ['./basic-in.component.scss'],
  providers: [provideNativeDateAdapter()],
})
export class BasicInComponent implements OnInit {
  @Input('eduTextbook') eduTextbook: Parse.Object | any;
  @Input('editFrom') editFrom: any;
  @Output() state: EventEmitter<any> = new EventEmitter<any>();
  @Output() save: EventEmitter<any> = new EventEmitter<any>();

  @ViewChild(MatAccordion) accordion: MatAccordion | any;

  @ViewChildren(BasicComponent) children: QueryList<BasicComponent> | any;

  /**删除分册 */
  async deleteVolume(index: number, comp: BasicComponent) {
    console.log(comp);
    if (this.eduTextbookVolumeList.length <= 2) {
      this.msg.create('warning', '全册最少两册');
      return;
    }
    this.eduTextbookVolumeList.splice(index, 1);
    this.typeNumber = this.typeNumber - 1;
    return;
    // console.log(this.eduTextbookVolumeList)
    // console.log(this.eduTextbookVolumeList[index])
    // if (this.eduTextbookVolumeList[index]?.id) {
    //   this.eduTextbookVolumeList[index]?.set('isDeleted', true)
    //   await this.eduTextbookVolumeList[index]?.save()
    //   delete this.eduTextbookVolumeList[index]
    //   this.typeNumber = this.typeNumber - 1
    // } else {
    //   delete this.eduTextbookVolumeList[index]
    //   this.typeNumber = this.typeNumber - 1
    // }
    // console.log(this.eduTextbookVolumeList);
  }

  /**上传分册数据 */
  async saveEduTextbookVolume(eduTextbookId?: string): Promise<any> {
    // console.log(eduTextbookId);
    let arr: Array<any> = []; //存储返回的数组id
    let isVrifly = true; //默认都通过，若一项填写未完成，则不通过
    // let list = this.children.toArray()
    return Promise.all(
      this.children.map(async (comp: any,index:number) => {
        // console.log(comp);
        let etvId = await comp.submitForm(eduTextbookId);
        console.log('返回eduTextbookVolume:'+etvId);
        arr.push({
          index:index,
          parse:{
            __type: 'Pointer',
            className: 'EduTextbookVolume',
            objectId: etvId,
          }
        });
        if (!comp.isComlpete) {
          isVrifly = false;
        }
        return arr;
      })
    ).then((data) => {
      // console.log(arr);
      let list = arr.sort((a,b)=>{return a.index - b.index }).map(item=> item.parse)
      // console.log(list);
      return {
        list: list,
        isVrifly,
      };
    });
  }
  eduTextbookId: string = '';
  saveLoading: boolean = false; //保存等待
  async saveEduTextbook(params: any, isComplete: boolean) {
    if (this.saveLoading) return;
    this.saveLoading = true;
    try {
      // this.changeImportantProject()
      // console.log(params);
      if (!this.eduTextbook) {
        let obj = Parse.Object.extend('EduTextbook');
        this.eduTextbook = new obj();
      }
      //设置推荐单位
      if(!this.eduTextbook?.get('inviteUnit')){
        let parentMap = await this.tbookSer.formatNode(
          this.tbookSer?.profile?.user?.department?.objectId
        );
        let inviteUnit = parentMap[1]?.title; //推荐单位
        if (parentMap[1]?.key) {
          this.eduTextbook?.set('department', {
            __type: 'Pointer',
            className: 'Department',
            objectId: parentMap[1]?.key,
          });
        }
        this.eduTextbook?.set('inviteUnit', inviteUnit);
      }

      this.eduTextbook?.set('user', Parse.User.current()?.toPointer());
      this.eduTextbook?.set('company', {
        __type: 'Pointer',
        className: 'Company',
        objectId: this.tbookSer.company,
      });
      let majorPoniter = this.selectList.find(
        (item:any) => item.code == params.majorPoniter
      );
      let discipline = this.selectList.find(
        (item:any) => item.code == params.discipline
      );
      this.eduTextbook?.set('title', params.title);
      this.eduTextbook?.set('majorPoniter', majorPoniter);
      this.eduTextbook?.set('discipline', discipline);
      this.eduTextbook?.set('approval', params.approval);
      this.eduTextbook?.set('type', params.type);
      this.eduTextbook?.set('approvedImgUrl', params.approvedImgUrl);
      // this.eduTextbook?.set('typeNumber', this.typeNumber);
      if (!this.eduTextbook?.get('code')) {
        let t =
          this.tbookSer.formatTime('YYYYmmddHHMMSS', new Date()) +
          Math.random().toString().slice(-4);
        this.eduTextbook.set('code', t);
      }
      // this.eduTextbook?.set('ISBN', (params.ISBN || 0).toString());
      // this.eduTextbook?.set('author', params.author);
      // this.eduTextbook?.set('unit', params.unit);
      // this.eduTextbook?.set('lang', params.lang);
      // this.eduTextbook?.set('authors', params.authors);
      // this.eduTextbook?.set('editor', params.editor);
      // this.eduTextbook?.set('editionUnit', params.editionUnit);
      // this.eduTextbook?.set('editionFirst', params.editionFirst);
      // this.eduTextbook?.set('carrierShape', params.carrierShape);
      // this.eduTextbook?.set('editionDate', params.editionDate);
      // this.eduTextbook?.set('editionNumber', params.editionNumber);
      // this.eduTextbook?.set('printDate', params.printDate);
      // this.eduTextbook?.set('printNumber', params.printNumber);
      // this.eduTextbook?.set('printSum', params.printSum);
      // this.eduTextbook?.set('importantProject', this.importantProject);
      // this.eduTextbook?.set('importantProjectOther', params.importantProjectOther);
      // this.eduTextbook?.set('unitType', params.unitType)

      let res = await this.eduTextbook?.save();
      this.eduTextbookId = await res?.id;
      // console.log(res?.id);
      let eduTextbookVolumes = await this.saveEduTextbookVolume(
        this.eduTextbookId
      );
      console.log(eduTextbookVolumes?.isVrifly);
      console.log(eduTextbookVolumes.list);
      this.eduTextbook?.set('childrens', eduTextbookVolumes.list);
      this.eduTextbook?.set('typeNumber', eduTextbookVolumes.list.length);
      
      isComplete = isComplete && eduTextbookVolumes?.isVrifly;
      //如果填写未完整，仅保存，状态修改待完善101
      if (this.eduTextbook.get('status') == '102' && !isComplete) {
        this.eduTextbook?.set('status', '101');
        this.eduTextbook.set('complete', false);
      } else if (!this.eduTextbook.get('status')) {
        this.eduTextbook?.set('status', '101');
      }
      if(isComplete){
        this.eduTextbook.set('complete', true)
      }
      this.eduTextbook.set('exportPDF', null)//重置导出文件地址
      await this.eduTextbook?.save();
      this.saveLoading = false;
      if (!isComplete) {
        this.msg.warning('保存成功，但存在未填写完成项');
      }
      return;
    } catch (err) {
      console.warn('保存错误:', err);
      this.saveLoading = false;
      this.msg.error('保存出错');
    }
  }
  singleId: string = '';
  loading = false;
  /**扩展表记录 */
  eduTextbookVolumeList: Array<any> = [];
  /**获取扩展表记录 */
  async getEduTextbookVolumeList() {
    this.loading = true;
    this.saveLoading = true
    if (this.typeNumber && this.typeNumber > 12) {
      this.typeNumber = 12;
    }
    // console.log(this.validateForm?.value?.type, this.typeNumber);
    let query = new Parse.Query('EduTextbook');
    query.equalTo('objectId', this.eduTextbook?.id);
    query.select('childrens');
    let r = await query.first();
    let list: any = r?.get('childrens') || [];
    console.log(list);
    this.eduTextbookVolumeList = new Array(this.typeNumber).fill({
      objectId: '',
    });
    if (this.validateForm?.value?.type == '全册') {
      if(this.eduTextbookVolumeList.length < 2){
        for (let index = 0; index <  2 - this.eduTextbookVolumeList.length; index++) {
          this.eduTextbookVolumeList.push({objectId:''})
        }
      }
      list.forEach((item: any, index: number) => {
        // console.log(item);
        this.eduTextbookVolumeList[index] = item;
      });
    } else {
      this.singleId = list[0]?.id;
    }
    this.loading = false;
    this.saveLoading = false
  }

  async checkSingle() {
    this.validateForm.get('type')?.setValue('单本');
    await this.getEduTextbookVolumeList();
  }
  /**申报类型选择全册 */
  async checkAll() {
    this.validateForm.get('type')?.setValue('全册');
    this.accordion?.openAll();
    this.getEduTextbookVolumeList();
  }

  changeCode() {}
  getCode(e: any) {}

  /***教材获批截图 */
  approvedImgList: Array<any> = [
    {
      name: '获批截图',
      status: 'done',
      url: '',
    },
  ];
  /**
   * 书号自动补全函数
   * @param isbn 书号
   */
  // async autoCompleteByISBN() {
  //   let isbn = this.validateForm.value?.ISBN;
  //   let result = await Parse.Cloud.run("tbookISBN", {
  //     isbn: isbn
  //   })
  //   if (!result?.isbn) {
  //     this.msg.warning('未找到该书号的图书信息，请手动填写')
  //   }

  //   // 其他字段，需补充接口与数据库对应关系
  //   this.validateForm.get("title")?.setValue(result?.book_name)
  //   this.validateForm.get("author")?.setValue(result?.author_name)
  //   this.validateForm.get("authors")?.setValue(result?.author)
  //   this.validateForm.get("majorPoniter")?.setValue(result?.major)
  //   this.validateForm.get("lang")?.setValue(languages.options?.[result?.languages]?.name)
  //   this.validateForm.get("editionUnit")?.setValue(result?.publisher)
  //   this.validateForm.get("editionDate")?.setValue(new Date(result?.publish_time))
  //   this.validateForm.get("carrierShape")?.setValue(result?.publication_class)
  //   console.log(result)
  // }
  /**出版时间及版次不可选择时间 */
  disabledEditionDate = (current: Date): boolean => {
    return current < new Date(2022, 11, 1);
  };

  /** 全册次数*/
  typeNumber: number = 2;
  // typeNumberChange() {
  //   if (this.typeNumber < 2) {
  //     this.msg.create('warning', '不得小于两册')
  //     this.typeNumber = 2
  //   } else {
  //   }
  //   this.getEduTextbookVolumeList()
  //   // this.eduTextbookVolumeList = []
  //   //   // for (let i = 1; i++; i <= this.typeNumber) {
  //   //   //   this.eduTextbookVolumeList.push(false)
  //   //   // }
  //   //   this.eduTextbookVolumeList=new Array(this.typeNumber-1).fill(false)
  //   //   console.log(this.eduTextbookVolumeList)

  // }
  validateForm: FormGroup<{
    title: FormControl<string>; //申报教材名称
    majorPoniter: FormControl<string>; //教材应用对象及所诉学科专业类
    discipline:FormControl<string>;
    approval: FormControl<string>; //是否为重点立项教材
    type: FormControl<string>; //申报类型
    approvedImgUrl: FormControl<string>; //重点立项教材获批截图

    // ISBN: FormControl<any>; //国际标准书号
    // author: FormControl<string>; //第一主编（作者）
    // unit: FormControl<string>; //第一主编（作者）单位
    // unitType: FormControl<string>//第一主编（作者）单位类型
    // lang: FormControl<string>; //教材主要语种类型
    // authors: FormControl<string>; //其他主编姓名
    // editor: FormControl<string>; //其他编者姓名
    // editionUnit: FormControl<string>; //出版单位
    // editionFirst: FormControl<Date>; //初版时间
    // carrierShape: FormControl<string>; //载体形式
    // editionDate: FormControl<Date>; //出版时间
    // editionNumber: FormControl<number>; //出版版次
    // printDate: FormControl<Date>; //最新印次时间
    // printNumber: FormControl<number>; //最新印次
    // printSum: FormControl<number>; //初版以来合计印数
    // importantProjectOther: FormControl<string>; //其他省部级及以上项目
  }> = this.fb.group({
    title: ['', [Validators.required]],
    majorPoniter: ['', [Validators.required]],
    discipline: ['', [Validators.required]],
    approval: ['', [Validators.required]],
    type: ['', [Validators.required]],
    approvedImgUrl: [''],

    // ISBN: [null, [Validators.required]],
    // author: ['', [Validators.required]],
    // unit: ['', [Validators.required]],
    // lang: ['', [Validators.required]],
    // authors: [''],
    // editor: [''],
    // editionUnit: ['', [Validators.required]],
    // editionFirst: [new Date(), [Validators.required]],
    // carrierShape: ['', [Validators.required]],
    // editionDate: [new Date(), [Validators.required]],
    // editionNumber: [0, [Validators.required]],
    // printDate: [new Date(), [Validators.required]],
    // printNumber: [0, [Validators.required]],
    // printSum: [0, [Validators.required]],
    // importantProjectOther: [''],
    // unitType: ['', [Validators.required]],
  });
  /** 所属学科专业类显示数量*/
  nzOptionOverflowSize = 5;
  //教材应用对象及所诉学科专业类
  selectList:any;
   //教材所属学科专业类
   selectList02=major.majors.options
  //语言选择
  selectLang: Array<any> = languages.options;
  //可选单位类型
  unitSelects: Array<any> = [
    {
      name: '部属高校',
      code: '部属高校',
    },
    {
      name: '部省合建高校',
      code: '部省合建高校',
    },
    {
      name: '省部共建高校',
      code: '省部共建高校',
    },
    {
      name: '其他',
      code: '其他',
    },
  ];
  //载体形式
  carrierOptions: Array<any> = [
    {
      name: '纸质教材',
      code: 'Z001',
    },
    {
      name: '数字教材',
      code: 'Z002',
    },
    {
      name: '纸质教材附带数字资源',
      code: 'Z003',
    },
  ];
  /**可选的重点项目 */
  importantProjectList: Array<any> = [
    {
      label: '首届全国教材建设奖全国优秀教材（高等教育类）',
      value: '首届全国教材建设奖全国优秀教材（高等教育类）',
      checked: false,
    },
    {
      label: '“十二五”普通高等教育本科国家级规划教材',
      value: '“十二五”普通高等教育本科国家级规划教材',
      checked: false,
    },
    {
      label: '“十二五”以来省级优秀教材',
      value: '“十二五”以来省级优秀教材',
      checked: false,
    },
    {
      label: '“十二五”以来省级规划教材',
      value: '“十二五”以来省级规划教材',
      checked: false,
    },
    {
      label: '其他省部级及以上项目',
      value: '其他省部级及以上项目',
      checked: false,
    },
  ];
  /**选中的重点项目 */
  importantProject: Array<any> = [];
  /**多选框改变 */
  changeImportantProject() {
    let checkedList =
      this.importantProjectList.filter((item) => item.checked) || [];
    this.importantProject = checkedList.map((item) => item.value);
    // console.log(this.importantProject);
  }
  /* 是否重点立项教材可选列表 */
  options: Array<any> = [
    {
      name: '经中央有关部门审定的教材（已点对点通知）',
      code: '经中央有关部门审定的教材（已点对点通知）',
    },
    {
      name: '首届全国教材建设奖优秀教材（高等教育类）教材',
      code: '首届全国教材建设奖优秀教材（高等教育类）教材',
    },
    {
      name: '“101计划”核心教材（已点对点通知）',
      code: '“101计划”核心教材（已点对点通知）',
    },
    {
      name: '“四新”重点建设教材（含战略性新兴领域教材）（已点对点通知）',
      code: '“四新”重点建设教材（含战略性新兴领域教材）（已点对点通知）',
    },
    {
      name: '否',
      code: '否',
    },
  ];

  constructor(
    public tbookSer: textbookServer,
    private fb: NonNullableFormBuilder,
    private modal: NzModalService,
    private msg: NzMessageService,
    private cdr: ChangeDetectorRef,
    private creatSev: CreatedService
  ) {
    this.selectList =[{degree:'面向所有学生',cate:'面向所有学生',code:'0000',name:'面向所有学生'},...major.majors.options] ;
  }

  isShowChooseEU: boolean = true;
  ngOnInit() {

    // if (this.eduTextbook?.get('editionUnit')) {
    //   this.isShowChooseEU = false
    // }
    // this.importantProject = this.eduTextbook?.get('importantProject') || []
    // if (this.importantProject?.length > 0) {
    //   for (let i in this.importantProjectList) {
    //     if (this.importantProject.indexOf(this.importantProjectList[i].value) != -1) {
    //       this.importantProjectList[i].checked = true
    //     }
    //   }
    // }

    this.approvedImgList[0].url = this.eduTextbook?.get('approvedImgUrl');
    this.typeNumber = this.eduTextbook?.get('childrens').length || 2;
    if (this.typeNumber > 12) this.typeNumber = 12;
    // console.log(this.approvedImgList)
    // console.log(this.eduTextbook);
    this.validateForm = this.fb.group({
      title: [this.eduTextbook?.get('title') || '', [Validators.required]],
      majorPoniter: [
        this.eduTextbook?.get('majorPoniter')?.code || '',
        [Validators.required],
      ],
      discipline:[
        this.eduTextbook?.get('discipline')?.code || '',
        [Validators.required],
      ],
      approval: [
        this.eduTextbook?.get('approval') || '',
        [Validators.required],
      ],
      type: [this.eduTextbook?.get('type') || '单本', [Validators.required]],
      approvedImgUrl: [this.eduTextbook?.get('approvedImgUrl') || ''],

      // ISBN: [parseInt(this.eduTextbook?.get('ISBN') || '') || null, [Validators.required]],
      // author: [this.eduTextbook?.get('author') || '', [Validators.required]],
      // unit: [this.eduTextbook?.get('unit') || '', [Validators.required]],
      // lang: [this.eduTextbook?.get('lang') || '', [Validators.required]],
      // authors: [this.eduTextbook?.get('authors') || ''],
      // editor: [this.eduTextbook?.get('editor') || '',],
      // editionUnit: [this.eduTextbook?.get('editionUnit') || '', [Validators.required]],
      // editionFirst: [this.eduTextbook?.get('editionFirst') || new Date(), [Validators.required]],
      // carrierShape: [this.eduTextbook?.get('carrierShape') || '', [Validators.required]],
      // editionDate: [this.eduTextbook?.get('editionDate') || new Date(), [Validators.required]],
      // editionNumber: [this.eduTextbook?.get('editionNumber') || 0, [Validators.required]],
      // printDate: [this.eduTextbook?.get('printDate') || new Date(), [Validators.required]],
      // printNumber: [this.eduTextbook?.get('printNumber') || 0, [Validators.required]],
      // printSum: [this.eduTextbook?.get('printSum') || 0, [Validators.required]],
      // importantProjectOther: [this.eduTextbook?.get('importantProjectOther') || ''],
      // unitType: [this.eduTextbook?.get('unitType') || '', [Validators.required]],
    });
    this.eduTextbookId = this.eduTextbook?.id;
    this.getEduTextbookVolumeList();
  }

  ngAfterViewInit() {
    // this.eduTextbookId = this.eduTextbook?.id;
    // this.accordion?.openAll();
    // this.cdr.detectChanges();
    // this.getEduTextbookVolumeList();
  }
  addVolume() {
    if (this.eduTextbookVolumeList.length >= 12) {
      this.msg.error('已超过最多册数');
      return;
    }
    this.eduTextbookVolumeList.push({ objectId: '' });
    this.typeNumber++;
  }
  upload(e: any, type: string) {
    console.log(e);
    let file = e[0];
    // if(type == 'copyrightImgUrl' || type == 'CIPImgUrl' ||type=='approvedImgUrl'){
    if (type == 'approvedImgUrl') {
      this.validateForm.value[type] = file?.url;
    }
    console.log(this.validateForm.value);
  }
  async submitForm(event?: string): Promise<void> {
    console.log(this.validateForm.value);
    console.log(this.validateForm.valid);
    if (event == 'next') {
      let params = this.validateForm.value;
      await this.saveEduTextbook(params, this.validateForm.valid);
      this.state.emit({ type: 'next', textBook: this.eduTextbook });
    }
    // if (this.validateForm.valid) {
    //   let params = this.validateForm.value
    //   if (event == 'next') {
    //     await this.saveEduTextbook(params, this.validateForm.valid)
    //     this.state.emit({ type: 'next', textBook: this.eduTextbook });
    //   }
    // } else {
    //   if (event == 'save') {
    //     let params = this.validateForm.value
    //     await this.saveEduTextbook(params, this.validateForm.valid)
    //     // await this.getEduTextbookVolumeList()
    //     this.modal.success({
    //       nzTitle: '保存成功',
    //       nzContent: '<p>已保存并且至空间</p>',
    //       nzOnOk: () => console.log('Info OK')
    //     });
    //     return
    //   }
    //   if (event == 'next') {
    //     let params = this.validateForm.value
    //     await this.saveEduTextbook(params, this.validateForm.valid)
    //     this.state.emit({ type: 'next', textBook: this.eduTextbook });
    //   }
    // }
    if (event == 'save') {
      let params = this.validateForm.value;
      await this.saveEduTextbook(params, this.validateForm.valid);
      // await this.getEduTextbookVolumeList()
      this.modal.success({
        nzTitle: '保存成功',
        nzContent: '<p>已保存并且至空间</p>',
        nzOnOk: () => console.log('Info OK'),
      });
    }
  }

  selectedValue = null;
  listOfOption: Array<{ value: string; text: string }> = [];
  nzFilterOption = (): boolean => true;
  eduTimeout: any;
  /**出版单位列表 */
  eduList: Array<Parse.Object> = [];
  /**搜索出版单位 */
  async search(value: string) {
    clearTimeout(this.eduTimeout);
    this.eduTimeout = setTimeout(async () => {
      let query = new Parse.Query('Department');
      query.notEqualTo('isDeleted', true);
      query.equalTo('parent', '66865d66ad23a23355b12aa7');
      query.contains('name', value);
      query.limit(10);
      this.eduList = await query.find();
    }, 500);
  }
  openFile(url: any) {
    window.open(url);
  }
}
