const ncu = require('npm-check-updates')
const axios = require('axios')

async function getRepositoryInfo (packageName) {
  try {
    const { data } = await axios.get(`https://registry.npmjs.org/${packageName}`)
    const repository = data.repository
    if (repository && repository.url) {
      const gitUrl = repository.url.replace('git+', '').replace('.git', '')
      const isGitHub = gitUrl.includes('github.com')

      return isGitHub ? `${gitUrl}/releases` : gitUrl
    }
  } catch (error) {
    console.error(`Error fetching repository info for ${packageName}: ${error.message}`)
  }
  return null
}

async function checkUpdates () {
  const updated = await ncu.run({
    packageFile: './package.json',
    upgrade: false
  })

  if (!Object.keys(updated).length) {
    console.log('All dependencies are up-to-date!')
    return
  }

  console.log('Dependencies that need to be updated:')
  for (const [key] of Object.entries(updated)) {
    const repoUrl = await getRepositoryInfo(key)
    console.log(`${key}: ${updated[key]} ${repoUrl ? `- [GitHub/Repo](${repoUrl})` : ''}`)
  }
}

checkUpdates().catch(err => console.error(err))