import { Component, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { STComponent, STColumn, STChange, STRequestOptions } from '@delon/abc/st';
import { SFComponent, SFSchema } from '@delon/form';
import { NzModalService } from 'ng-zorro-antd/modal';
import { TicketService } from '../../services/ticket.service';

@Component({
  selector: 'app-invoice-detail',
  templateUrl: './invoice-detail.component.html',
  styleUrls: ['./invoice-detail.component.less']
})
export class InvoiceDetailComponent implements OnInit {
  @ViewChild('orderST', { static: true })
  orderST!: STComponent;
  @ViewChild('orderSf', { static: false })
  orderSf!: SFComponent;
  orderColumns: STColumn[] = this.initOrderST();
  orderSchema: SFSchema = this.initOrderSF();

  @ViewChild('costST', { static: true })
  costST!: STComponent;
  @ViewChild('costSf', { static: false })
  costSf!: SFComponent;
  costColumns: STColumn[] = this.initCostST();
  costSchema: SFSchema = this.initCostSF();

  @ViewChild('invoiceST', { static: true })
  invoiceST!: STComponent;
  invoiceColumns: STColumn[] = this.initInvoiceST();

  isCanEdit = false;
  isEdit = false;

  headerInfo: any = {};

  constructor(public service: TicketService, private route: ActivatedRoute) {
    this.isCanEdit = !!route.snapshot.queryParams.type;
    const id = route.snapshot.params.id;
    this.loadInvoiceHeader(id);
  }

  ngOnInit(): void {}

  beforeReq = (requestOptions: STRequestOptions) => {
    if (this.orderSf) {
      Object.assign(requestOptions.body, { ...this.orderSf.value });
    }
    if (this.costSf) {
      Object.assign(requestOptions.body, { ...this.costSf.value });
    }
    return requestOptions;
  };

  loadInvoiceHeader(id: string) {
    this.service.request(this.service.$api_get_invoice_header_detail, { id }).subscribe(res => {
      console.log(res);
      if (res) {
        this.headerInfo = res;
      }
    });
  }

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

  saveInvoices() {
    console.log(this.invoiceST._data);

    this.isEdit = false;
  }

  /**
   * 重置表单
   */
  resetSF(tab: number) {
    switch (tab) {
      case 1:
        this.orderSf.reset();
        break;
      case 2:
        this.costSf.reset();
        break;

      default:
        break;
    }
  }

  private initOrderSF(): SFSchema {
    return {
      properties: {
        billHId: {
          type: 'string',
          title: '订单号',
          ui: {
            autocomplete: 'off'
          }
        },
        billType: {
          type: 'string',
          title: '订单类型',
          enum: [
            { label: '全部', value: '' },
            { label: '整车', value: 1 },
            { label: '大宗', value: 2 }
          ],
          ui: {
            widget: 'select',
            placeholder: '请选择'
          },
          default: ''
        },
        projectId: {
          type: 'string',
          title: '所属项目',
          ui: {
            widget: 'select',
            placeholder: '请选择',
            allowClear: true,
            asyncData: () => this.service.getEnterpriseProject()
          },
          default: ''
        }
      }
    };
  }

  private initOrderST(): STColumn[] {
    return [
      { title: '订单号', index: 'billHId' },
      { title: '订单完成日期', index: 'billTime', type: 'date' },
      { title: '所属项目', index: 'projectId' },
      { title: '订单类型', index: 'billType' },
      { title: '装货地', index: 'loadingfrom' },
      { title: '卸货地', index: 'loadingto' },
      { title: '货物信息', index: 'goodsinfo' },
      { title: '承运司机', index: 'driverinfo' },
      { title: '申请金额', index: 'billkpnotax' },
      { title: '运输费', index: 'fjfmoney2' },
      { title: '附加费', index: 'fjfmoney' },
      { title: '开票金额', index: 'billkpmoney' }
    ];
  }

  private initCostSF(): SFSchema {
    return {
      properties: {
        billHId: {
          type: 'string',
          title: '订单号',
          ui: {
            autocomplete: 'off'
          }
        },
        feeHId: {
          type: 'string',
          title: '费用号',
          ui: {
            autocomplete: 'off'
          }
        }
      }
    };
  }

  private initCostST(): STColumn[] {
    return [
      { title: '费用号', index: 'feeHId' },
      { title: '订单号', index: 'billHId' },
      { title: '订单日期', index: 'createTime', type: 'date' },
      { title: '计费日期', index: 'callNo', type: 'date' },
      { title: '税率', index: 'vatrate' },
      { title: '申请金额', index: 'vatmoney' },
      { title: '开票金额', index: 'vatnotax' }
    ];
  }

  private initInvoiceST(): STColumn[] {
    return [
      { title: '服务名称', render: 'vatname' },
      { title: '规格型号', render: 'vatmodel' },
      { title: '单位', render: 'vatunit' },
      { title: '数量', render: 'vatqty' },
      { title: '金额', index: 'vatnotax' },
      { title: '税率', index: 'vatrate' },
      { title: '税额', index: 'vattax' }
    ];
  }
}
