name: Announce

on:
  workflow_dispatch:
    inputs:
      title:
        description: "タイトル"
        required: true
        type: string
      body:
        description: "本文（Markdown可、X向けには自動でプレーンテキスト化）"
        required: true
        type: string
      channels:
        description: "投稿先"
        required: true
        type: choice
        default: "all"
        options:
          - all
          - discussions
          - discord
          - twitter

jobs:
  discussions:
    if: inputs.channels == 'all' || inputs.channels == 'discussions'
    runs-on: ubuntu-latest
    permissions:
      discussions: write
    steps:
      - name: Post to GitHub Discussions
        uses: abirber/github-create-discussion@v6
        with:
          title: ${{ inputs.title }}
          body: ${{ inputs.body }}
          repository-id: ${{ github.event.repository.node_id }}
          category-name: "Announcements"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  discord:
    if: inputs.channels == 'all' || inputs.channels == 'discord'
    runs-on: ubuntu-latest
    steps:
      - name: Post to Discord
        env:
          DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
          TITLE: ${{ inputs.title }}
          BODY: ${{ inputs.body }}
        run: |
          jq -n \
            --arg title "$TITLE" \
            --arg desc "$BODY" \
            '{embeds: [{title: $title, description: $desc, color: 5814783}]}' \
          | curl -sf -X POST -H "Content-Type: application/json" -d @- "$DISCORD_WEBHOOK_URL"

  twitter:
    if: inputs.channels == 'all' || inputs.channels == 'twitter'
    runs-on: ubuntu-latest
    steps:
      - name: Post to X
        uses: ethomson/send-tweet-action@v2
        with:
          status: "${{ inputs.title }}\n\n${{ inputs.body }}"
          consumer-key: ${{ secrets.TWITTER_CONSUMER_API_KEY }}
          consumer-secret: ${{ secrets.TWITTER_CONSUMER_API_SECRET }}
          access-token: ${{ secrets.TWITTER_ACCESS_TOKEN }}
          access-token-secret: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
