

import { useTranslation } from "@buzzwaretech/i18n";
import type { TIssueServiceType } from "@buzzwaretech/types";
import { EIssueServiceType } from "@buzzwaretech/types";
import { CollapsibleButton } from "@buzzwaretech/ui";
import { observer } from "mobx-react";
import { useMemo } from "react";
// hooks
import { useIssueDetail } from "@/hooks/store/use-issue-detail";
// BuzzwareTech-web
import { useTimeLineRelationOptions } from "@/buzzwareTech-web/components/relations";
// local imports
import { RelationActionButton } from "./quick-action-button";

type Props = {
  isOpen: boolean;
  issueId: string;
  disabled: boolean;
  issueServiceType?: TIssueServiceType;
};

export const RelationsCollapsibleTitle = observer(
  function RelationsCollapsibleTitle(props: Props) {
    const {
      isOpen,
      issueId,
      disabled,
      issueServiceType = EIssueServiceType.ISSUES,
    } = props;
    const { t } = useTranslation();
    // store hook
    const {
      relation: { getRelationCountByIssueId },
    } = useIssueDetail(issueServiceType);

    const ISSUE_RELATION_OPTIONS = useTimeLineRelationOptions();
    // derived values
    const relationsCount = getRelationCountByIssueId(
      issueId,
      ISSUE_RELATION_OPTIONS,
    );

    // indicator element
    const indicatorElement = useMemo(
      () => (
        <span className="flex items-center justify-center">
          <p className="text-14 !leading-3 text-tertiary">{relationsCount}</p>
        </span>
      ),
      [relationsCount],
    );

    return (
      <CollapsibleButton
        isOpen={isOpen}
        title={t("common.relations")}
        indicatorElement={indicatorElement}
        actionItemElement={
          !disabled && (
            <RelationActionButton
              issueId={issueId}
              disabled={disabled}
              issueServiceType={issueServiceType}
            />
          )
        }
      />
    );
  },
);
