import type { NextFunction, Request, Response } from 'express';

import { verifyDeviceToken } from '../utils/device-token';

const extractBearerToken = (authorizationHeader?: string): string | null => {
  if (!authorizationHeader || !authorizationHeader.startsWith('Bearer ')) {
    return null;
  }

  return authorizationHeader.slice('Bearer '.length).trim();
};

export const requireDeviceAuth = (req: Request, res: Response, next: NextFunction): void => {
  const token = extractBearerToken(req.headers.authorization);

  if (!token) {
    res.status(401).json({ message: 'Missing bearer device token' });
    return;
  }

  const payload = verifyDeviceToken(token);

  if (!payload) {
    res.status(401).json({ message: 'Invalid device token' });
    return;
  }

  req.deviceAuth = payload;
  next();
};
