import { AfterViewInit, ChangeDetectorRef, Component, OnChanges, OnInit, ViewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { SFAutoCompleteWidgetSchema, SFComponent, SFRadioWidgetSchema, SFSchema, SFSchemaEnumType, SFSelectWidgetSchema, SFTextareaWidgetSchema, SFUISchema } from '@delon/form';
import { _HttpClient } from '@delon/theme';
import { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';
import { map } from 'rxjs/operators';
import { AmapPoiPickerComponent } from 'src/app/shared/components/amap';
import { ChannelSalesService } from '../../services/channel-sales.service';

@Component({
  selector: 'app-parter-channel-sales-edit',
  templateUrl: './edit.component.html'
})
export class ParterChannelSalesEditComponent implements OnInit {
  @ViewChild('sf', { static: false }) sf!: SFComponent;
  schema!: SFSchema;
  ui!: SFUISchema;
  i: any;
  type: any;
  record:any;
  currentOAItem:any;
  constructor(
    public http: _HttpClient,
    private cdr: ChangeDetectorRef,
    private route: ActivatedRoute,
    private modalService: NzModalService,
    public service: ChannelSalesService,
    private modalRef: NzModalRef
  ) {}

  ngOnInit(): void {
    
    this.service.request(this.service.$api_getChannelSalesInfo, {id:this.i?.id}).subscribe(res => {
      if(res){
        this.record = res;
      }
      this.initSF();
    });
    
  }
  initSF() {
    this.schema = {
      properties: {
        id: {
          type: 'string',
          title: '',
          ui: { hidden: true }
        },
        name: {
          title: '渠道销售姓名',
          type: 'string',
          maxLength: 12,
          ui: {
            placeholder:'请输入'
          } 
        },
        phoneNumber: {
          title: '手机号',
          type: 'string',
          maxLength: 11,
          ui: {
            placeholder:'请输入'
          } 
        },
        employeeVO: {
          title: '关联OA员工',
          type: 'string',
          ui: {
            widget: 'autocomplete',
            placeholder:'请选择',
            asyncData: (input:string) => this.service.request(this.service.$api_fuzzyQuery,{name:input}).pipe(
              map((res: any) => {
                return res.map((item:any)=>{
                  return {label: item.empName+"/"+item.empNo, value: item.empNo, obj: item}
                })
              })
            ),
            change:(item:any, org:any)=>{
              this.currentOAItem = org.obj;
            }
          } as SFAutoCompleteWidgetSchema,
        },
        isAuthorization: {
          type: 'string',
          title: '授权登录运营后台',
          enum: [
            { label: '否', value: '0' },
            { label: '是', value: '1' }
          ],
          ui: {
            widget: 'radio',
          } as SFRadioWidgetSchema,
          default: '0',
        },
        roleIds: {
          title: '',
          type: 'string',
          ui: {
            widget: 'select',
            placeholder: '授权角色',
            mode: 'multiple',
            maxMultipleCount: 5,
            asyncData: () => {
              return this.service.request(this.service.$api_getAppRoleList).pipe(
                map((res: any) => {
                  return res
                    .filter((role: any) => role.roleCode !== 'Administrator')
                    .map((item: any) => {
                      return { label: item.roleName, value: item.id };
                    });
                })
              );
            },
            visibleIf: { isAuthorization: (value: string) => value === '1' }
          },
        },
        remark: {
          type: 'string',
          title: '备注',
          maxLength: 50,
          ui: {
            widget: 'textarea',
            autosize: { minRows: 3, maxRows: 6 },
            placeholder:'请输入50字符'
          } as SFTextareaWidgetSchema,
        },
      },
      required: ['name', 'phoneNumber', 'employeeVO', 'roleIds', 'remark']
    };
    this.ui = {
      '*': {
        spanLabelFixed: 150,
        grid: { span: 24 }
      },
      $isAuthorization:{  grid: { span: 12 }},
      $roleIds:{ spanLabelFixed: 10, grid: { span: 12 }},
      

    };
  }

  close() {
    this.modalRef.destroy();
  }
  save() {
    this.sf.validator({ emitError: true });
    if(!this.sf.valid) return;
    this.service.request(this.service.$api_save, { ...this.sf.value, employeeVO: this.currentOAItem}).subscribe(res => {
      if (res) {
        this.modalRef.destroy(true);
      } else {
        this.service.msgSrv.error(res.msg);
      }
    });
  }
}
