package com.kamco.cd.kamcoback.members.dto;

import com.kamco.cd.kamcoback.postgres.entity.MemberEntity;
import java.util.Collection;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

@RequiredArgsConstructor
public class MemberDetails implements UserDetails {

  private final MemberEntity member;

  @Override
  public Collection<? extends GrantedAuthority> getAuthorities() {
    // TODO: tb_member_role 에서 역할 꺼내서 권한으로 변환하고 싶으면 여기 구현
    // 예시 (나중에 MemberRoleEntity 보고 수정):
    // return member.getTbMemberRoles().stream()
    //     .map(role -> new SimpleGrantedAuthority("ROLE_" + role.getRoleName()))
    //     .toList();

    return List.of(); // 일단 빈 권한 리스트
  }

  @Override
  public String getPassword() {
    return member.getPassword(); // 암호화된 비밀번호
  }

  @Override
  public String getUsername() {
    // 로그인 ID 로 무엇을 쓸지 선택
    // 1) 이메일 로그인:
    return member.getEmail();

    // 2) 사번으로 로그인하고 싶으면:
    // return member.getEmployeeNo();
  }

  @Override
  public boolean isAccountNonExpired() {
    return true;
  }

  @Override
  public boolean isAccountNonLocked() {
    return true;
  }

  @Override
  public boolean isCredentialsNonExpired() {
    return true;
  }

  @Override
  public boolean isEnabled() {
    // status 가 ACTIVE 일 때만 로그인 허용
    return "ACTIVE".equalsIgnoreCase(member.getStatus());
  }

  public MemberEntity getMember() {
    return member;
  }
}
