import {AfterViewInit, Component} from '@angular/core';
import {Router, RouterLink, RouterOutlet} from "@angular/router";
import {
  NzContentComponent,
  NzFooterComponent,
  NzHeaderComponent,
  NzLayoutComponent,
  NzSiderComponent
} from "ng-zorro-antd/layout";
import {NzBreadCrumbComponent, NzBreadCrumbItemComponent} from "ng-zorro-antd/breadcrumb";
import {NzColDirective, NzRowDirective} from "ng-zorro-antd/grid";
import {NzMenuDirective, NzMenuGroupComponent, NzMenuItemComponent, NzSubMenuComponent} from "ng-zorro-antd/menu";
import {DatePipe, NgClass, NgForOf, NgIf} from "@angular/common";
import {NzIconDirective} from "ng-zorro-antd/icon";
import {NzTabComponent, NzTabSetComponent} from "ng-zorro-antd/tabs";
import {TabComponent} from "../tab/tab.component";
import {BrowserStorageService} from "../../../utils/localStorage.service";
import {DATA, INIT_FLAG, LOGIN_DATA, USER_TOKEN} from "../../../data/login/localStorage.namespace";
import {NzDropDownDirective, NzDropdownMenuComponent} from "ng-zorro-antd/dropdown";
import {NzMessageService} from "ng-zorro-antd/message";
import {Dictionary, dictionaryData} from "../../../data/common/dictionary.namespace";
import {CommonService} from "../../../services/common/common.service";
import {LoginService} from "../../../services/login/login.service";
import {NzConfigService} from "ng-zorro-antd/core/config";
import {NzPopoverDirective} from "ng-zorro-antd/popover";
import {NzListItemComponent, NzListItemMetaComponent, NzListModule} from "ng-zorro-antd/list";
import {NzTypographyComponent} from "ng-zorro-antd/typography";
import {IconService} from "../../../services/common/icon.service";
import {FileService} from "../../../services/file/file.service";
import {DataUtilsPipe} from "../../../pipes/common/data-utils.pipe";
import {GoodsListComponent} from "../../trade/goods-list/goods-list.component";
import {Subject} from "rxjs";
import {CommunicationService} from "../../../services/common/communication.service";
import {NzModalComponent, NzModalContentDirective, NzModalModule} from "ng-zorro-antd/modal";
import {NzResultComponent} from "ng-zorro-antd/result";
import {NzSpinComponent} from "ng-zorro-antd/spin";
import {NzTimelineComponent, NzTimelineItemComponent} from "ng-zorro-antd/timeline";
import {NzTableComponent, NzTableModule} from "ng-zorro-antd/table";
import {BusinessTypePipe} from "../../../pipes/file/business-type.pipe";
import {StatusPipe} from "../../../pipes/file/status.pipe";
import {NzPopconfirmDirective} from "ng-zorro-antd/popconfirm";
import {NzButtonComponent} from "ng-zorro-antd/button";
import {NzBadgeComponent} from "ng-zorro-antd/badge";

@Component({
  selector: 'app-index',
  standalone: true,
  imports: [
    RouterOutlet,
    NzLayoutComponent,
    NzHeaderComponent,
    NzBreadCrumbComponent,
    NzBreadCrumbItemComponent,
    NzContentComponent,
    NzFooterComponent,
    NzRowDirective,
    NzColDirective,
    NzMenuItemComponent,
    NzModalModule,
    NzMenuDirective,
    RouterLink,
    NzSubMenuComponent,
    NgForOf,
    NgClass,
    NzIconDirective,
    NzTabComponent,
    NzListModule,
    NzTabSetComponent,
    TabComponent,
    NzSiderComponent,
    NzMenuGroupComponent,
    NzDropDownDirective,
    NzDropdownMenuComponent,
    NgIf,
    NzPopoverDirective,
    NzListItemComponent,
    NzListItemMetaComponent,
    NzTypographyComponent,
    NzTableModule,
    DataUtilsPipe,
    GoodsListComponent,
    DatePipe,
    NzModalComponent,
    NzResultComponent,
    NzSpinComponent,
    NzTimelineComponent,
    NzTimelineItemComponent,
    NzTableComponent,
    NzModalContentDirective,
    BusinessTypePipe,
    StatusPipe,
    NzPopconfirmDirective,
    NzButtonComponent,
    NzBadgeComponent
  ],
  templateUrl: './index.component.html',
  styleUrl: './index.component.less',
})
export class IndexComponent {
  // 菜单数据
  menuData: any = [{
    'menuName' : '首页',
    'selected' : true,
  }];
  // 表单页数
  tablePageNum = 1;
  // 表单数据
  tableData: any;
  userInfo: any;
  // 左侧菜单栏数据
  leftMenuData: any = [];
  // 侧边菜单展示开关
  isCollapse = true;
  loading = false;
  isVisible = false;
  // 当前顶级菜单
  currentParentMenu: any = {};
  downloadType = 1;
  interval: any;
  showComponent = false;
  constructor(
    private commonService: CommonService,
    private storage: BrowserStorageService,
    private communicationService: CommunicationService,
    private nzConfigService: NzConfigService,
    private iconService: IconService,
    private fileService: FileService,
    private message: NzMessageService,
    private router: Router,  // 路由
    private login: LoginService
  ) {

    this.communicationService.currentMessage.subscribe(message => {
      this.showComponent = true;
      this.fileRecords();
      this.findFileRecords(message.id);
      this.downloadType = 2;
    });

    this.nzConfigService.set('button', { nzSize: 'large' })
    this.nzConfigService.set('treeSelect', { nzSize: 'large' })
    // 缓存数据字典
    this.commonService.queryDictionary('','',(data: any) => {
      dictionaryData.length = 0;
      for (let item of data['return_data']) {
        dictionaryData.push(
          {
            codeType: item.codeType,
            codeValue: item.codeValue,
            codeName: item.codeName,
            codeDesc: item.codeDesc,
            sortId: item.sortId,
            ext1: item.ext1,
            ext2: item.ext2,
            ext3: item.ext3
          }
        );
      }
    });

    this.menuData = this.menuData.concat(this.storage.get(DATA)['menuTree']);
    this.userInfo = this.storage.get(DATA)['account'];
    this.fileRecords();
  }

  // 选择操作
  isSelected(item: any) {
    this.menuData.map((data: any) => {
      data.selected = data.menuName === item.menuName;
    });
    if (item.menuName === '首页') {
      // 激活首页路由
      this.router.navigateByUrl('/admin/index').finally();
    }

    this.currentParentMenu = item;
    this.leftMenuData = item['childMenuList'];
    this.isCollapse = item['menuName'] === '首页';

  }

  // 退出登录
  public loginOut(): void {
    this.login.loginOut( (data: any) => {
      if (data['return_code'] === '000000') {
        this.storage.remove(LOGIN_DATA);
        this.storage.remove(DATA);
        this.storage.remove(USER_TOKEN);
        this.storage.remove(INIT_FLAG);
        this.router.navigateByUrl('/login').then();
      } else {
        this.message.error(data['return_msg']);
      }
    });
  }

  // 弹出下载记录
  public getFileRecords() {
    this.loading = true;
    this.isVisible = true;
  }

  // 查询下载记录
  public fileRecords() {
    let searchForm = {
      time: new Date().getTime()
    }

    this.fileService.getFileRecordsList(searchForm , (data: any) => {
      if (data['return_code'] == '000000') {
        this.tableData = data['return_data'];
      } else {
        this.message.error(data['return_msg']);
      }
      this.loading  = false;
    });
  }

  // 查询详情
  public findFileRecords(id: number) {
    this.interval = setInterval(() => this.fileService.findFileRecords(id, (data: any) => {
      if (data['return_code'] == '000000') {
        if (data['return_data'].status == 1 || data['return_data'].status == 3) {
          this.showComponent = false;
          clearTimeout(this.interval);
          this.downloadType = 1;
          this.fileRecords();
        }
      }else {
        this.showComponent = false;
        clearTimeout(this.interval);
        this.fileRecords();
        this.downloadType = 1;
      }
    }), 1000);



  }

  // 下载
  public getDownLoad(id: number) {
    this.fileService.getDownLoad(id, (data: any) => {
      if (data['return_code'] == '000000') {
        this.fileRecords();
        window.open(data['return_data']);
      }else {
        this.message.error(data['return_msg']);
      }
    })
  }

}