import { Component, OnInit } from '@angular/core';
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import {CouponService} from '../../../services/coupon.service';
import {ActivateService} from '../../../services/activate.service';
import {NzMessageService, NzUploadFile} from 'ng-zorro-antd';
import {environment} from '../../../../environments/environment';
import {AgentService} from '../../../services/agent.service';
import {ActivatedRoute} from '@angular/router';

function getBase64(file: File): Promise<string | ArrayBuffer | null> {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = error => reject(error);
  });
}

@Component({
  selector: 'app-activate-edit',
  templateUrl: './activate-edit.component.html',
  styleUrls: ['./activate-edit.component.scss']
})
export class ActivateEditComponent implements OnInit {

  validateForm!: FormGroup;
  validateFormAward!: FormGroup;
  data: any;
  editFlag = false;
  id: number;
  agentId: number;
  listOfOption: string[] = [];
  listOfData = [];
  agentData = [];
  current = 0;
  listOfControl = [{
    isEdit: true,
    agentId: null,
    agentName: null,
    prizeNum: null,
    prizeId: null,
    prizeName: null,
    loading : false
  }];
  FILE_URL = environment.imageUrl;
  POST_URL = environment.baseUrl;
  isVisible = false;
  logoFile = [];
  previewImage: string | undefined = '';
  previewVisible = false;
  discountList = []; // 列表数据
  constructor(
      private fb: FormBuilder,
      private coupon: CouponService,
      private activate: ActivateService,
      private message: NzMessageService, // 信息提示
      private activatedRoute: ActivatedRoute,
      private agent: AgentService,
  ) { }

  ngOnInit(): void {
    this.activatedRoute.queryParams.subscribe(queryParams => {
      if (queryParams.id != null) {
        this.editFlag = true;
        this.id = queryParams.id;
        this.getDetails(queryParams.id);
      }
    });
    this.validateForm = this.fb.group({
      title: [null, [Validators.required]],
      productIdArray: [null, [Validators.required]],
      type: [null, [Validators.required]],
      content: [null, [Validators.required]],
      time: [null, [Validators.required]],
    });

    this.validateFormAward = this.fb.group({
      name: [null, [Validators.required]],
      num: [null, [Validators.required]],
    });

    const whereObject = {
      pageNum: 1 ,
      pageSize: 800 ,
      status: 2
    };

    const whereObjectA = {
      pageNum: 1 ,
      pageSize: 800 ,
      type: 1
    };

    this.getCouponList(whereObject);
    this.getListAgent(whereObjectA);


  }

  public getCouponList(whereObject) {
    whereObject.status = 2;
    this.coupon.getCouponList(whereObject, data => {
      if (data['return_code'] === '000000') {
        this.listOfOption = data['return_data'].list;
      } else {
        this.message.error(data['return_msg']);
      }
    });
  }

  // 绑定优惠券
  public getDiscount(id: number , i ): void {
    this.listOfControl[i].agentName = this.agentData.find(item => {
      return item.id == id;
    }).agentName;
    this.agentId = id;
    const whereObject = {};
    whereObject['pageNum'] = 1;
    whereObject['pageSize'] = 10000;
    whereObject['agentId'] = id;
    this.agent.getDiscountAgentList(whereObject, data => {
      if (data['return_code'] === '000000') {
        this.discountList = data['return_data'].list;
      } else {
        this.message.error(data['return_msg']);
      }
    });
  }

  getDiscountName(id: number , i ) {
    this.listOfControl[i].prizeName = this.discountList.find(item => {
      return item['highDiscount'].id == id;
    })['highDiscount'].discountName;
    console.log(this.listOfControl);
  }

  public getListAgent(whereObject) {
    this.agent.getListAgent(whereObject, data => {
      if (data['return_code'] === '000000') {
        this.agentData = data['return_data'].list;
      } else {
        this.message.error(data['return_msg']);
      }
    });
  }

  // 图片查看
  handlePreview = async (file: NzUploadFile) => {
    if (!file.url && !file.preview) {
      // tslint:disable-next-line:no-non-null-assertion
      file.preview = await getBase64(file.originFileObj!);
    }
    this.previewImage = file.url || file.preview;
    this.previewVisible = true;
  }

  // 返回
  getBack() {
    history.back();
  }

  // 重置
  public resetForm(): void {
    this.validateForm.reset();
  }

  // 基本信息提交
  public editActivityInfo(): void {
    // tslint:disable-next-line:forin
    for (const i in this.validateForm.controls) {
      this.validateForm.controls[i].markAsDirty();
      this.validateForm.controls[i].updateValueAndValidity();
      if (this.validateForm.controls[i].errors != null) {
        this.message.error('必填项不能为空');
        return;
      }
    }

    this.validateForm.value.ruleArray = [{
      partakeMode: 1,
      productType: 1 ,
      productIdArray: this.validateForm.value.productIdArray
    }];
    this.validateForm.value.startTime = this.validateForm.value.time[0].getTime();
    this.validateForm.value.endTime = this.validateForm.value.time[1].getTime();

    if (this.editFlag) {
      this.validateForm.value.id = this.id;
    }
    this.activate.editActivityInfo(this.validateForm.value, data => {
      if (data['return_code'] === '000000') {
        this.editFlag = true;
        this.id = data['return_data'].id;
        this.current += 1;
        this.message.success('编辑成功');
      } else {
        this.message.create('error', '编辑失败');
      }
    });
  }

  // 查询详情
  public getDetails(id) {
    this.activate.getDetailById(id, data => {
      if (data['return_code'] === '000000') {
        data['return_data'].time = [new Date(data['return_data']['startTime']), new Date(data['return_data']['endTime'])];
        data['return_data'].type = String(data['return_data'].type);
        data['return_data'].productIdArray = data['return_data'].ruleArray[0].productIdArray;
        this.validateForm.patchValue(data['return_data']);
      } else {
        this.message.create('error', data['return_msg']);
      }
    });
    this.getListByActivityId(id);

  }

  getListByActivityId(id: number ) {
    this.activate.getListByActivityId(id , data => {
      if (data['return_code'] === '000000') {
        this.listOfData = data['return_data'];
      } else {
        this.message.create('error', data['return_msg']);
      }
    });
  }

  // 上一步
  pre(): void {
    this.current -= 1;
  }

  // 下一步
  getNest(): void {
    if (this.current === 0) {
      this.editActivityInfo();
    } else {
      history.back();
    }

  }

  // 完成
  done(): void {

  }

  // 新增
  addField(i): void {
    if (
        this.listOfControl[i].prizeId == null ||
        this.listOfControl[i].prizeNum == null ||
        this.listOfControl[i].agentId == null
    ) {
      this.message.error('请填写必填项!');
      return;
    }
    this.listOfControl[i].isEdit = false;
    const control = {
      isEdit: true,
      agentId: null,
      agentName: null,
      prizeNum: null,
      prizeId: null,
      prizeName: null,
      loading : false
    };
    this.listOfControl.push(control);

  }

  // 删除资质
  removeField(i, e: MouseEvent): void {
    e.preventDefault();
    if (this.listOfControl.length > 1) {
      this.listOfControl.splice(i, 1);
      this.listOfControl[i - 1].isEdit = true;
    }
  }


  // 添加配置
  getAdd(): void {
    this.isVisible = true;
  }


  handleOk(): void {

    // tslint:disable-next-line:forin
    for (const i in this.validateFormAward.controls) {
      this.validateFormAward.controls[i].markAsDirty();
      this.validateFormAward.controls[i].updateValueAndValidity();
      if (this.validateFormAward.controls[i].errors != null) {
        this.message.error('必填项不能为空');
        return;
      }
    }

    if (
        this.listOfControl[this.listOfControl.length - 1].prizeId == null ||
        this.listOfControl[this.listOfControl.length - 1].prizeNum == null ||
        this.listOfControl[this.listOfControl.length - 1].agentId == null
    ) {
      this.message.error('请填写必填项!');
      return;
    }

    this.validateFormAward.value.activityPrizes = this.listOfControl;
    this.validateFormAward.value.activityInfoId = this.id;
    if (this.logoFile.length !== 0) {
      if (this.logoFile[0]['response'] != null) {
        this.validateFormAward.value.img = this.logoFile[0]['response']['return_data'][0];
      } else {
        this.validateFormAward.value.img = this.logoFile[0].name;
      }
    }
    this.message.loading('生成奖品中!');
    this.activate.editActivityAward(this.validateFormAward.value , data => {
      if (data['return_code'] === '000000') {
        this.isVisible = false;
        this.getListByActivityId(this.id);
        this.message.success('编辑成功');
      } else {
        this.message.create('error', '编辑失败');
      }
    });

  }

  handleCancel(): void {
    this.isVisible = false;
  }


  deleteActivateAward(id: number) {
    this.activate.deleteActivateAward(id , data => {
      if (data['return_code'] === '000000') {
        this.getListByActivityId(this.id);
        this.message.success('成功');
      } else {
        this.message.create('error', '编辑失败');
      }
    });
  }
}