import { Injectable, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';

// 메일 발송 서비스 (플레이스홀더) —
// 현재는 실제 SMTP 전송 대신 백엔드 로그로 대체한다.
// 추후 nodemailer 등 도입 시 이 서비스 내부 구현만 교체하면 호출부는 그대로 유지된다.
@Injectable()
export class MailService {
  private readonly logger = new Logger(MailService.name);

  constructor(private readonly config: ConfigService) {}

  // 가입 인증 메일 — 개발 환경에서만 인증 링크(원문 토큰 포함)를 로그로 출력한다.
  // 운영 환경에서는 토큰이 로그에 남지 않도록 수신자만 기록한다(실 메일러로 교체 전제).
  sendVerificationEmail(to: string, name: string, verifyUrl: string): void {
    const isProd = this.config.get<string>('NODE_ENV') === 'production';
    if (isProd) {
      this.logger.log(
        `[메일 발송 - 가입 인증] 수신자=${to} (인증 링크는 보안상 로그에 남기지 않음 — 실 메일러 필요)`,
      );
      return;
    }
    this.logger.log(
      [
        '',
        '──────────────── [메일 발송 - 가입 인증] ────────────────',
        `받는 사람 : ${name} <${to}>`,
        '제목      : [Relay] 이메일 인증을 완료해 주세요',
        '본문      : 아래 링크를 클릭하면 회원가입이 완료됩니다.',
        `인증 링크 : ${verifyUrl}`,
        '──────────────────────────────────────────────────────',
        '',
      ].join('\n'),
    );
  }

  // 비밀번호 재설정 메일 — 개발 환경에서만 재설정 링크(원문 토큰 포함)를 로그로 출력한다.
  // 운영 환경에서는 토큰이 로그에 남지 않도록 수신자만 기록한다(실 메일러로 교체 전제).
  sendPasswordResetEmail(to: string, name: string, resetUrl: string): void {
    const isProd = this.config.get<string>('NODE_ENV') === 'production';
    if (isProd) {
      this.logger.log(
        `[메일 발송 - 비밀번호 재설정] 수신자=${to} (재설정 링크는 보안상 로그에 남기지 않음 — 실 메일러 필요)`,
      );
      return;
    }
    this.logger.log(
      [
        '',
        '──────────────── [메일 발송 - 비밀번호 재설정] ────────────────',
        `받는 사람 : ${name} <${to}>`,
        '제목      : [Relay] 비밀번호 재설정 안내',
        '본문      : 아래 링크를 클릭해 새 비밀번호를 설정해 주세요. (1시간 유효)',
        `재설정 링크 : ${resetUrl}`,
        '안내      : 본인이 요청하지 않았다면 이 메일을 무시하세요.',
        '────────────────────────────────────────────────────────────',
        '',
      ].join('\n'),
    );
  }
}
