package com.codebyte.api.auth.repository;

import com.codebyte.api.auth.domain.RefreshToken;
import com.codebyte.api.auth.domain.User;
import java.time.Instant;
import java.util.Optional;
import java.util.UUID;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

/** Repository for {@link RefreshToken}. */
public interface RefreshTokenRepository extends JpaRepository<RefreshToken, UUID> {

    Optional<RefreshToken> findByTokenHash(String tokenHash);

    /** Revokes every still-active refresh token for a user (used on reuse detection and reset). */
    @Modifying(clearAutomatically = true, flushAutomatically = true)
    @Query(
            "update RefreshToken t set t.revokedAt = :now "
                    + "where t.user = :user and t.revokedAt is null")
    int revokeAllActiveForUser(@Param("user") User user, @Param("now") Instant now);
}
