/**
 * 인증 관련 타입 정의
 * 백엔드 UserModel Entity 및 Auth DTOs 기준으로 작성
 */

import { BaseFields } from './base.types';

/**
 * 사용자 정보
 * 백엔드 UserModel Entity와 일치
 */
export interface UserDto extends BaseFields {
  pkUserNo: number; // 내부 PK (자동증가)
  userId: string; // 로그인 ID
  userName: string; // 이름
  userPhone?: string; // 핸드폰번호
  userEmail?: string; // 이메일 (인증용)
  userRole: 'USER' | 'ADMIN'; // 권한 (USER: 일반, ADMIN: 관리자)
  delDt?: string; // 삭제일시 (Soft Delete)
}

/**
 * 회원가입 DTO
 * 백엔드 SignupDto와 일치
 */
export interface SignupDto {
  userSe: 'FARM' | 'CNSLT' | 'ORGAN'; // 사용자 구분 (FARM/CNSLT/ORGAN)
  userInstName?: string; // 농장명/기관명
  userId: string; // 사용자 ID (4자 이상)
  userPassword: string; // 비밀번호 (6자 이상)
  userName: string; // 이름
  userPhone: string; // 휴대폰 번호
  userBirth?: string; // 생년월일
  userEmail: string; // 이메일
  userAddress?: string; // 주소
  userBizNo?: string; // 사업자등록번호
}

/**
 * 로그인 DTO
 * 백엔드 LoginDto와 일치
 */
export interface LoginDto {
  userId: string; // 사용자 ID (로그인 ID)
  userPassword: string; // 비밀번호
}

/**
 * 로그인 응답 DTO
 * 백엔드 LoginResponseDto와 일치
 */
export interface LoginResponseDto {
  message: string;
  accessToken?: string;
  refreshToken?: string;
  user: {
    pkUserNo: number;
    userId: string;
    userName: string;
    userEmail?: string;
    userRole: 'USER' | 'ADMIN';
  };
}

/**
 * 회원가입 응답 DTO
 * 백엔드 SignupResponseDto와 일치
 */
export interface SignupResponseDto {
  message: string;
  redirectUrl: string;
  userId?: string;
  userNo?: number;
}

/**
 * 사용자 프로필 DTO (프론트엔드 확장)
 */
export interface UserProfileDto extends UserDto {
  farmCount?: number; // 보유 농장 수
  cowCount?: number; // 보유 개체 수
}

/**
 * 프로필 수정 DTO
 */
export interface UpdateProfileDto {
  userName?: string; // 이름 수정
  userPhone?: string; // 전화번호 수정
  userEmail?: string; // 이메일 수정
}

/**
 * 회원가입 폼 데이터 (클라이언트 전용)
 */
export interface SignupFormData {
  userSe: string;
  userId: string;
  userPassword: string;
  confirmPassword: string;
  userName: string;
  userPhone: string;
  userEmail: string;
  emailId: string;
  emailDomain: string;
  customDomain?: string;
  userInstName?: string;
  userBirth?: string;
  userAddress?: string;
  userBizNo?: string;
}

/**
 * 인증 응답 DTO (통합)
 * 로그인/회원가입/토큰갱신 응답에 사용
 */
export interface AuthResponseDto {
  message?: string;
  accessToken: string;
  refreshToken?: string;
  user: UserDto;
}

// 타입 alias (호환성)
export type User = UserDto;
export type AuthResponse = LoginResponseDto;
