package com.ga.core.mapper.user;

import com.ga.core.vo.user.UserContactBrief;
import com.ga.core.vo.user.UserResp;
import com.ga.core.vo.user.UserSearchParam;
import com.ga.core.vo.user.UserVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface UserMapper {

    UserVO selectById(@Param("userId") Long userId);
    UserVO selectByLoginId(@Param("loginId") String loginId);
    UserResp selectDetailById(@Param("userId") Long userId);

    List<UserResp> selectList(UserSearchParam param);
    int countByCondition(UserSearchParam param);

    int insert(UserVO vo);
    int update(UserVO vo);
    int updatePassword(@Param("userId") Long userId, @Param("password") String password);
    int updateLastLogin(@Param("userId") Long userId);
    int incrementFailCount(@Param("userId") Long userId);
    int resetFailCount(@Param("userId") Long userId);
    int updateStatus(@Param("userId") Long userId, @Param("status") String status);
    int updatePhone(@Param("userId") Long userId, @Param("phone") String phone);

    List<String> selectRoleCodes(@Param("userId") Long userId);

    int insertUserRole(@Param("userId") Long userId, @Param("roleId") Long roleId);
    int deleteUserRoles(@Param("userId") Long userId);

    /**
     * 특정 role_code 보유 + ACTIVE 상태 사용자 중 최선임(또는 가장 최근 가입) 1명의 연락처 요약.
     * approval 단계 알림 발송 시 phone 획득용. 없으면 null 반환.
     */
    UserContactBrief selectFirstActiveContactByRoleCode(@Param("roleCode") String roleCode);
}
