import { Admin } from '@api/modules/admin/admin.entity';
import { ApiProperty, PickType } from '@nestjs/swagger';
import { Expose, Type } from 'class-transformer';
import { IsString } from 'class-validator';

export class AdminSignInDto extends PickType(Admin, [
  'admLoginId',
  'admPassword',
]) {}

export class SalesSignInDto {
  @Expose()
  @ApiProperty({ description: '영업대리점 로그인 아이디' })
  @IsString()
  sagLoginId!: string;

  @Expose()
  @ApiProperty({ description: '영업대리점 로그인 패스워드' })
  @IsString()
  sagPassword!: string;
}

class SalesAgencyDto {
  @ApiProperty({ description: '영업대리점 ID' })
  sagId!: number;

  @ApiProperty({ description: '영업대리점 로그인 ID' })
  sagLoginId!: string;
}

export class SalesSignInResponseDto {
  @ApiProperty({ description: '로그인 영업대리점 정보' })
  @Type(() => SalesAgencyDto)
  admin!: SalesAgencyDto;
}

// 기업관리자 로그인 요청 DTO
export class CorpSignInDto {
  @Expose()
  @ApiProperty({ description: '기업관리자 로그인 아이디' })
  @IsString()
  agcLoginId!: string;

  @Expose()
  @ApiProperty({ description: '기업관리자 로그인 패스워드' })
  @IsString()
  agcPassword!: string;
}

// 조직관리자 로그인 DTO (tn_member 기반)
export class CorpOrgSignInDto {
  //* 기획(2026-07, 로그인_기업조직관리자.html): 기업 식별을 로그인 아이디가 아닌
  //*  공개용 기업코드(agcCorporateCode)로 변경 — 조직관리자가 최고관리자 아이디를 몰라도 됨
  @Expose()
  @ApiProperty({ description: '기업코드(기업 식별용)' })
  @IsString()
  agcCorporateCode!: string;

  @Expose()
  @ApiProperty({ description: '조직관리자 회원 로그인 아이디' })
  @IsString()
  memLoginId!: string;

  @Expose()
  @ApiProperty({ description: '조직관리자 비밀번호' })
  @IsString()
  memPassword!: string;
}

// 기업관리자 정보 DTO
class CorpAgencyDto {
  @ApiProperty({ description: '기업 ID' })
  agcId!: number;

  @ApiProperty({ description: '기업관리자 로그인 ID' })
  agcLoginId!: string;

  @ApiProperty({ description: '기업명', required: false })
  agcCorporateName?: string;

  //* 권한: CORP_SUPER(최고관리자) / CORP_ORG(조직관리자). CORP_ORG 운영 가능 여부는 orgCanWrite로 분리.
  @ApiProperty({ description: '기업관리자 권한', required: false })
  agcRole?: string;

  @ApiProperty({ description: '조직관리자 회원 ID', required: false })
  memId?: number;

  @ApiProperty({ description: '조직관리자 이름', required: false })
  memName?: string;

  @ApiProperty({ description: '관리 조직 ID', required: false })
  orgId?: string;

  @ApiProperty({ description: '조직관리자 운영 가능 여부', required: false })
  orgCanWrite?: boolean;

  @ApiProperty({
    description:
      '분석관리 화면 노출여부 (0: 미노출 | 1: 분석목록만 | 2: 분석목록+상세팝업)',
    required: false,
  })
  agcAnalysisView?: number;
}

// 기업관리자 로그인 응답 DTO
export class CorpSignInResponseDto {
  @ApiProperty({ description: '로그인 기업관리자 정보' })
  @Type(() => CorpAgencyDto)
  admin!: CorpAgencyDto;
}
