import {Component, OnInit} from '@angular/core';
import {ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
import {Router} from "@angular/router";
import {HttpClient} from "@angular/common/http";
import {LoginService} from "../../../services/login.service";
import {NzModalModule, NzModalService} from "ng-zorro-antd/modal";
import {ADMIN_INFO_OBJECT, INIT_FLAG, ROLE_TYPE, TOKEN} from "../../../services/local-storage.namespace";
import {NzFormDirective} from "ng-zorro-antd/form";
import {BrowserStorageService} from "../../../utils/localStorage.service";

@Component({
  selector: 'app-login',
  standalone: true,
  imports: [
    NzFormDirective,
    ReactiveFormsModule,
    NzModalModule,
  ],
  templateUrl: './login.component.html',
  styleUrl: './login.component.less'
})
export class LoginComponent implements OnInit {

  loginForm: UntypedFormGroup; // 登录表单

  constructor(private store: BrowserStorageService, // 数据请求
              private router: Router,  // 路由
              private form: UntypedFormBuilder, // 表单校验
              private http: HttpClient, // http请求
              private loginService: LoginService,
              private modal: NzModalService) {
  }

  ngOnInit() {
    this.loginForm = this.form.group({
      loginName: [null, [Validators.required]],
      password: [null, [Validators.required]],
    });
  }

  /**
   * 登录
   */
  submitLogin() {
    // tslint:disable-next-line:forin
    for (const i in this.loginForm.controls) {
      this.loginForm.controls[i].markAsDirty();
      this.loginForm.controls[i].updateValueAndValidity();
    }
    if (this.loginForm.status == null || this.loginForm.status !== 'VALID') {
      this.modal.warning({
        nzTitle: '提示',
        nzContent: '请填写用户和密码',
      });
      return;
    }
    this.loginService.userLogin(this.loginForm.value, data => {
      if (data['return_code'] === '000000') {
        this.store.set(ADMIN_INFO_OBJECT, data['return_data']['object']);
        this.store.set(TOKEN, data['return_data']['uniqueCode']);
        this.store.set(INIT_FLAG, true);
        this.store.set(ROLE_TYPE, data['return_data']['type']);
        this.router.navigateByUrl('/admin/index').then();
      } else {
        this.modal.warning({
          nzTitle: '提示',
          nzContent: data['return_msg']
        });
      }
    });
  }
}
