package com.zioinfo.kintex.auth.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Map;

/**
 * 사용자·행사 멤버십 조회 매퍼.
 * <b>TODO(kintex-db-engineer)</b>: 아래 시그니처에 대한 XML(resources/mybatis/mapper/UserMapper.xml)을
 * PLANNING §7 ERD(User, EventMember)에 맞춰 구현한다. 비밀번호 해시 컬럼은 응답 DTO로 절대 노출 금지.
 */
@Mapper
public interface UserMapper {

    /** 이메일로 사용자 인증행(userId, displayName, passwordHash, hallManager) 조회. 없으면 null. */
    Map<String, Object> findAuthByEmail(@Param("email") String email);

    /** 사용자의 행사별 역할 맵 (eventId → roleCode). */
    java.util.List<Map<String, Object>> findEventRoles(@Param("userId") String userId);

    /**
     * 사업자등록번호가 킨텍스 등록업체(registered=true)인지 조회 → true/false, 없으면 null.
     * 장치업체(CONTRACTOR) 초대 수락 게이트(계약: NOT_REGISTERED_COMPANY). 기존 company 테이블 read-only.
     */
    Boolean findCompanyRegistered(@Param("registrationNo") String registrationNo);

    /** 내정보 표시용 프로필(email·phone·deptId + 사진 유무). password_hash·otp_secret 절대 select 금지. */
    Map<String, Object> findProfile(@Param("userId") String userId);

    /** 프로필 사진 메타(photoPath·photoContentType) 조회 — 서빙 엔드포인트용. 없으면 null. */
    Map<String, Object> findPhotoMeta(@Param("userId") String userId);

    /** 프로필 사진 메타 갱신(본인만 호출됨 — 서비스에서 principal.userId 강제). 영향 행수 반환. */
    int updatePhoto(@Param("userId") String userId,
                    @Param("photoPath") String photoPath,
                    @Param("photoContentType") String photoContentType);
}
