import express from 'express';
import * as icons from 'simple-icons';
import sharp from 'sharp';

const app = express();
const port = {{ container_port }};

// Helper: convert 'nextcloud' → 'siNextcloud'
function getExportName(slug) {
  return 'si' + slug
    .split('-')
    .map(part => part[0].toUpperCase() + part.slice(1))
    .join('');
}

// Root: redirect to your documentation
app.get('/', (req, res) => {
  res.redirect('{{ domains | get_url('web-app-sphinx', WEB_PROTOCOL) }}/{{ application_id | rel_role_path_by_application_id }}/README.html');
});

// GET /:slug.svg
app.get('/:slug.svg', (req, res) => {
  const slug = req.params.slug.toLowerCase();
  const exportName = getExportName(slug);
  const icon = icons[exportName];

  if (!icon) {
    return res.status(404).send('Icon not found');
  }

  res.type('image/svg+xml');
  res.send(icon.svg);
});

// GET /:slug.png?size=...
app.get('/:slug.png', async (req, res) => {
  const slug = req.params.slug.toLowerCase();
  const size = parseInt(req.query.size, 10) || 128;
  const exportName = getExportName(slug);
  const icon = icons[exportName];

  if (!icon) {
    return res.status(404).send('Icon not found');
  }

  try {
    const pngBuffer = await sharp(Buffer.from(icon.svg))
      .resize(size, size)
      .png()
      .toBuffer();

    res.type('image/png');
    res.send(pngBuffer);
  } catch (err) {
    console.error('PNG generation error:', err);
    res.status(500).send('PNG generation error');
  }
});

app.listen(port, () => {
  console.log(`Simple-Icons server listening at http://0.0.0.0:${port}`);
});
