<?php
   namespace Controls;

   function button_tag(string $value, string $type, $attributes = "") {
      return "<button dojoType=\"dijit.form.Button\" $attributes type=\"$type\">".htmlspecialchars($value)."</button>";
   }

   function submit_tag(string $value, $attributes = "") {
      return button_tag($value, "submit", "class=\"alt-primary\" $attributes");
   }

   function select_tag(string $name, $value, array $values, string $attributes = "", string $id = "") {
      $dojo_type = strpos($attributes, "dojoType") === false ? "dojoType='fox.form.Select'" : "";

      $rv = "<select $dojo_type name=\"".htmlspecialchars($name)."\"
         id=\"".htmlspecialchars($id)."\" name=\"".htmlspecialchars($name)."\" $attributes>";

      foreach ($values as $v) {
         $is_sel = ($v == $value) ? "selected=\"selected\"" : "";

         $rv .= "<option value=\"".htmlspecialchars($v)."\" $is_sel>".htmlspecialchars($v)."</option>";
      }

      $rv .= "</select>";

      return $rv;
   }

   function select_labels(string $name, string $value, string $attributes = "", string $id = "") {
      $pdo = \Db::pdo();

      $sth = $pdo->prepare("SELECT caption FROM ttrss_labels2
            WHERE owner_uid = ? ORDER BY caption");
      $sth->execute([$_SESSION['uid']]);

      $values = [];

      while ($row = $sth->fetch()) {
         array_push($values, $row["caption"]);
      }

      return select_tag($name, $value, $values, $attributes, $id);
   }

   function select_hash(string $name, $value, array $values, string $attributes = "", string $id = "") {
      $dojo_type = strpos($attributes, "dojoType") === false ? "dojoType='fox.form.Select'" : "";

      $rv = "<select $dojo_type name=\"".htmlspecialchars($name)."\"
         id=\"".htmlspecialchars($id)."\" name=\"".htmlspecialchars($name)."\" $attributes>";

      foreach ($values as $k => $v) {
         $is_sel = ($k == $value) ? "selected=\"selected\"" : "";

         $rv .= "<option value=\"".htmlspecialchars($k)."\" $is_sel>".htmlspecialchars($v)."</option>";
      }

      $rv .= "</select>";

      return $rv;
   }

   function hidden_tag(string $name, string $value) {
      return "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\"
         name=\"".htmlspecialchars($name)."\" value=\"".htmlspecialchars($value)."\">";
   }

   function checkbox_tag(string $name, bool $checked = false, string $value = "", string $attributes = "", string $id = "") {
      $is_checked = $checked ? "checked" : "";
      $value_str = $value ? "value=\"".htmlspecialchars($value)."\"" : "";

      return "<input dojoType='dijit.form.CheckBox' name=\"".htmlspecialchars($name)."\"
                  $value_str $is_checked $attributes id=\"".htmlspecialchars($id)."\">";
   }

   function select_feeds_cats(string $name, int $default_id = null, string $attributes = "",
                  bool $include_all_cats = true, string $root_id = null, int $nest_level = 0, string $id = "") {

      $ret = "";

      if (!$root_id) {
         $ret .= "<select name=\"".htmlspecialchars($name)."\"
                        id=\"".htmlspecialchars($id)."\"
                        default=\"".((string)$default_id)."\"
                        dojoType=\"fox.form.Select\" $attributes>";
      }

      $pdo = \Db::pdo();

      if (!$root_id) $root_id = null;

      $sth = $pdo->prepare("SELECT id,title,
               (SELECT COUNT(id) FROM ttrss_feed_categories AS c2 WHERE
                  c2.parent_cat = ttrss_feed_categories.id) AS num_children
               FROM ttrss_feed_categories
               WHERE owner_uid = :uid AND
               (parent_cat = :root_id OR (:root_id IS NULL AND parent_cat IS NULL)) ORDER BY title");
      $sth->execute([":uid" => $_SESSION['uid'], ":root_id" => $root_id]);

      $found = 0;

      while ($line = $sth->fetch()) {
         ++$found;

         if ($line["id"] == $default_id) {
            $is_selected = "selected=\"1\"";
         } else {
            $is_selected = "";
         }

         for ($i = 0; $i < $nest_level; $i++)
            $line["title"] = " " . $line["title"];

         if ($line["title"])
            $ret .= sprintf("<option $is_selected value='%d'>%s</option>",
               $line["id"], htmlspecialchars($line["title"]));

         if ($line["num_children"] > 0)
            $ret .= select_feeds_cats($id, $default_id, $attributes,
               $include_all_cats, $line["id"], $nest_level+1, $id);
      }

      if (!$root_id) {
         if ($include_all_cats) {
            if ($found > 0) {
               $ret .= "<option disabled=\"1\">―――――――――――――――</option>";
            }

            if ($default_id == 0) {
               $is_selected = "selected=\"1\"";
            } else {
               $is_selected = "";
            }

            $ret .= "<option $is_selected value=\"0\">".__('Uncategorized')."</option>";
         }
         $ret .= "</select>";
      }

      return $ret;
   }