<?php

  document::$snippets['title'][] = language::translate('title_favicon', 'Favicon');

  breadcrumbs::add(language::translate('title_appearance', 'Appearance'));
  breadcrumbs::add(language::translate('title_favicon', 'Favicon'));

  $icon_sizes = [96, 64, 48, 32];
  $thumbnail_sizes = [256, 192, 128];

  if (isset($_POST['upload'])) {

    try {
      if (empty($_FILES['image'])) {
        throw new Exception(language::translate('error_missing_image', 'You must select an image'));
      }

      if (!extension_loaded('imagick')) {
        throw new Exception('The .ico format requires that you enable Imagick for PHP to perform this operation');
      }

      if (empty(Imagick::queryFormats('ICO'))) {
        throw new Exception('Install icon support for Imagick to continue this operation');
      }

      if (preg_match('#\.svg$#i', $_FILES['image']['name']) && empty(Imagick::queryFormats('SVG'))) {
        throw new Exception('Install SVG support for Imagick to continue this operation');
      }

      if (preg_match('#\.webp$#i', $_FILES['image']['name']) && empty(Imagick::queryFormats('WebP'))) {
        throw new Exception('Install WebP support for Imagick to continue this operation');
      }

      if (preg_match('#\.avif$#i', $_FILES['image']['name']) && empty(Imagick::queryFormats('AVIF'))) {
        throw new Exception('Install AVIF support for Imagick to continue this operation');
      }

      $image = new Imagick();
      $image->setBackgroundColor(new ImagickPixel('transparent'));
      $image->readImage($_FILES['image']['tmp_name']);

      $geo = $image->getImageGeometry();
      if (256 / $geo['width'] * $geo['height'] > 256) {
        $image->scaleImage(256, 0);
      } else {
        $image->scaleImage(0, 256);
      }

      $image->cropImage(256, 256, 0, 0);

      foreach ($thumbnail_sizes as $size) {
        $clone = clone $image;
        $clone->setFormat('png32');
        $clone->scaleImage($size, 0);
        $clone->writeImage(FS_DIR_STORAGE . 'images/favicons/favicon-'. $size .'x'. $size .'.png');
      }

      $icon = new Imagick();
      $icon->setFormat('ico');
      foreach ($icon_sizes as $size) {
        $clone = clone $image;
        $clone->scaleImage($size, 0);
        $icon->addImage($clone);
      }

      $icon->writeImages(FS_DIR_STORAGE . 'images/favicons/favicon.ico', true);

      $image->destroy();
      $icon->destroy();
      $clone->destroy();

      header('Cache-Control: only-if-cached; must-revalidate');
      header('Pragma: no-cache');

      notices::add('success', language::translate('success_changes_saved_refresh_cache', 'Changes saved successfully. If you don\'t see any changes, try <a href="https://www.google.com/search?q=how+to+hard+refresh+a+web+page" target="_blank">hard refreshing</a> the page or clear browser cache.'));
      header('Location: '. document::link());
      exit;

    } catch (Exception $e) {
      notices::add('errors', $e->getMessage());
    }
  }

?>
<style>
.icons {
  margin-bottom: 2em;
}
.icons .icon {
  display: inline-block;
  text-align: center;
}
.icons .icon:not(:first-child) {
  margin-left: .5em;
}
.icons .thumbnail {
  width: auto;
  margin: 0;
  margin-bottom: 1em;
  text-align: center;
}
</style>

<div class="card card-app">
  <div class="card-header">
    <div class="card-title">
      <?php echo $app_icon; ?> <?php echo language::translate('title_favicon', 'Favicon'); ?>
    </div>
  </div>

  <div class="card-body">
    <?php echo functions::form_draw_form_begin('favicon_form', 'post', false, true); ?>

      <div class="icons">

        <?php foreach ($thumbnail_sizes as $size) { ?>
        <?php if (is_file($icon = FS_DIR_STORAGE . 'images/favicons/favicon-'.$size.'x'.$size.'.png')) { ?>
        <div class="icon">
          <img class="thumbnail" src="<?php echo document::href_rlink($icon); ?>" width="256" height="256" alt="">
          <div><?php echo basename($icon); ?></div>
        </div>
        <?php } ?>
        <?php } ?>

        <?php if (is_file($icon = FS_DIR_STORAGE . 'images/favicons/favicon.ico')) { ?>
        <div class="icon">
          <img class="thumbnail" src="data:image/x-icon;base64,<?php echo base64_encode(file_get_contents($icon)); ?>" width="48" height="48" alt="">
          <div><?php echo basename($icon); ?></div>
        </div>
        <?php } ?>

      </div>

      <div class="form-group" style="max-width: 480px;">
        <label><?php echo language::translate('title_new_icon', 'New Icon'); ?></label>
        <div class="input-group">
          <?php echo functions::form_draw_file_field('image', 'accept=".ico,.png,.svg"'); ?>
          <?php echo functions::form_draw_button('upload', language::translate('title_upload', 'Upload'), 'submit'); ?>
        </div>
      </div>

      <p><?php echo strtr(language::translate('note_favicon_best_result_achieved', 'Note: Best results are achieved by uploading a %size pixels PNG image with alpha transparency.'), ['%size' => '256x256']); ?></p>

    <?php echo functions::form_draw_form_end(); ?>
  </div>
</div>