package com.bio.bio_backend.domain.base.member.service;

import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;

import com.bio.bio_backend.domain.base.member.dto.MemberDto;
import com.bio.bio_backend.domain.base.member.dto.GetMemberResponseDto;
import com.bio.bio_backend.domain.base.member.dto.MemberSearchCondition;
import com.bio.bio_backend.global.dto.PagedResult;

import java.util.List;

public interface MemberService extends UserDetailsService {

    UserDetails loadUserByUsername(String id);

    MemberDto createMember(MemberDto memberDTO);

    String getRefreshToken(String id);

    void deleteRefreshToken(String id);

    void updateMember(MemberDto member);
    
    /**
     * 검색 조건에 따른 회원 목록 조회
     * @param condition 검색 조건
     * @return GetMemberResponseDto 리스트
     */
    List<GetMemberResponseDto> getMembers(MemberSearchCondition condition);
    
    /**
     * 페이지네이션된 회원 목록 조회
     * @param condition 검색 조건
     * @param page 페이지 번호
     * @param size 페이지 크기
     * @return PagedResult<GetMemberResponseDto> 페이지네이션된 회원 목록
     */
    PagedResult<GetMemberResponseDto> getMembersPaged(MemberSearchCondition condition, int page, int size);
}
