export type PersistedOidcUser = {
  access_token?: string;
  expires_at?: number;
  profile?: Record<string, unknown>;
};

const OIDC_USER_KEY_PREFIX = "oidc.user:";
const OIDC_CLIENT_ID = "devfront";

export function findPersistedOidcUser(
  storage: Storage = window.localStorage,
): PersistedOidcUser | null {
  for (let index = 0; index < storage.length; index += 1) {
    const key = storage.key(index);
    if (
      key === null ||
      !key.startsWith(OIDC_USER_KEY_PREFIX) ||
      !key.endsWith(`:${OIDC_CLIENT_ID}`)
    ) {
      continue;
    }

    const rawValue = storage.getItem(key);
    if (!rawValue) {
      continue;
    }

    try {
      const parsed = JSON.parse(rawValue) as PersistedOidcUser;
      if (
        typeof parsed.expires_at === "number" &&
        parsed.expires_at * 1000 > Date.now()
      ) {
        return parsed;
      }
    } catch {
      // Ignore malformed storage entries and keep scanning.
    }
  }

  return null;
}
