========================================================================
 コラボ概要欄メーカー  CD-01  v1.0
 コラボ配信の概要欄を、選んで並べるだけで作るソフト
========================================================================

コラボ相手を一度登録しておけば、あとは選んで並べるだけで
概要欄ができあがります。毎回リンクを探して打ち直す手間がなくなります。

・ネットにはつなぎません。データはこのソフトの隣に保存されます。
・USB メモリに丸ごと入れて持ち歩いても、そのまま動きます。


------------------------------------------------------------------------
 1. 起動のしかた
------------------------------------------------------------------------

  「起動.bat」をダブルクリック

  （exe 版を使う場合は CollabDeck.exe をダブルクリック）

  うまく動かないときは「検査.bat」を実行してください。
  どこがおかしいかが日本語で出ます。


------------------------------------------------------------------------
 2. 使い方
------------------------------------------------------------------------

  ① 左の列：登録 / 編集
     フルネームだけ必須です。配信ページの URL を貼ると、
     YouTube なのか Twitch なのかを自動で見分けて埋めます。
     「＋ リンク追加」で、その他のリンクを何本でも足せます。

  ② 中の列：保存済みデータ
     登録した人が五十音順に並びます。カードをクリックすると選べます。
     「編集」で書き換え、「削除」で消せます。

  ③ 右の列：検索・選択・出力
     検索欄にフルネームの一部を入れると絞り込めます。
     ニックネームを入れて **Enter を押すと、その人が自動で選ばれます**。
     選んだ人は「選択済み」に並びます。**ドラッグで順番を入れ替え** られます
     （Ctrl+↑ / Ctrl+↓ でも動きます）。
     外すときは Delete キー、ダブルクリック、
     または「選んだ人を外す」ボタンです。
     いちばん下に概要欄ができるので、「テキストをコピー」で貼り付けるだけです。
     **Ctrl+Shift+C** でもコピーできます。


------------------------------------------------------------------------
 3. できること
------------------------------------------------------------------------

  ・URL からサイトを自動判別
      配信ページの URL を貼るだけで「配信サイト」が埋まります。
      X の URL を配信欄に貼ってしまったら、X の欄へ移します。
      その他リンクも、リンク名を URL から推測して入れます。

  ・配信サイトはたくさん選べる
      YouTube・Twitch のほかに、ニコニコ生放送・ツイキャス・TikTok
      なども選べます。一覧に無いサイトは、その場で打ち込めます。

  ・概要欄の書式を変えられる
      「書式を編集」から。番号つき・見出しつきなどが最初から入っています。

  ・よく使う組み合わせを覚えられる
      毎回同じ面子でコラボするなら、選んだ状態で
      「いまの選択を保存」。次からは1クリックで呼び出せます。
      並び順も一緒に覚えます。

  ・二重登録に気づける
      同じ名前・同じ URL の人がすでにいると、カードに印が出ます。
      保存するときにも確かめます。

  ・並び順を選べる（五十音 / 登録順 / 新しい順）

  ・作った概要欄の履歴
      「テキストをコピー」を押すたびに控えます。
      メニューの「ファイル」→「作った概要欄の履歴…」（Ctrl+H）で、
      前に作ったものをそのまま出し直せます（直近50件）。

  ・YouTube の概要欄の上限（5000文字）を超えたら教えます


------------------------------------------------------------------------
 4. バックアップの取り方と戻し方
------------------------------------------------------------------------

登録した人が消えてしまっても、控えがあれば戻せます。
パソコンを買い替えたときの引っ越しにも、そのまま使えます。

  ① 取っておく
     メニューの「ファイル」→「バックアップを書き出す（まるごと）」で、
     ファイルを1つ保存します。登録した人だけでなく、組み合わせ・
     自分で作った書式・設定・履歴まで、まとめて入ります。
     人の一覧だけを表計算ソフトで見たいときは「CSV に書き出す」です。

  ② 戻す
     メニューの「ファイル」→「取り込む（バックアップから戻す）」
     （Ctrl+I）を開きます。
     「ファイルを開く」で、さっき保存したファイルを選んでください。
     中身を貼り付け欄に貼って読ませることもできます。
     CSV も同じ口から読めます。

取り込む **前に下見** が出ます。
「何件足すか」「何件は同じ名前だから足さないか」を見てから決められます。

  ★取り込みで、いま入っている人が消えることはありません。
  ★同じデータを2回取り込んでも、二重には増えません。
  ★取り込む前の中身は data.bak.json に残ります。


------------------------------------------------------------------------
 5. データの置き場所
------------------------------------------------------------------------

  このソフトと同じフォルダ:

    data.json                  … 本体（登録した人・組み合わせ・書式）
    data.bak.json              … 1つ前の中身（自動）
    data.bak2.json             … 2つ前（自動）
    data.bak3.json             … 3つ前（自動）
    data.日次-YYYYMMDD.json     … その日の最初の中身（7日ぶん・自動）
    data.減少前-<日時>.json      … 件数が急に減る直前の控え（消しません）
    data.読めなかった-<日時>.json … 壊れていた中身の退避先（消しません）

  ・保存は「別名で書いてから差し替える」方式です。
    書いている途中で電源が落ちても data.json が半端になりません。
  ・data.json の中身が壊れていたら、自動で控えから戻します。
    そのとき、壊れていた中身は消さずに残します。
  ・控えは3世代 + 日付ごとに残るので、事故に気づくのが翌日でも戻れます。
  ・「読めなかっただけ」のときは、ファイルには一切触りません。
    見出しに「読み取り専用」と出て、保存を止めます
    （空のデータで上書きして消してしまわないため）。
    ソフトを二重に起動していないか確かめて、
    「ファイル」→「データをもう一度読み込む」（F5）を押すと再開できます。
  ・バックアップは「ファイル」→「バックアップを書き出す（まるごと）」で
    いつでも作れます。


------------------------------------------------------------------------
 6. 困ったとき
------------------------------------------------------------------------

  Q. 起動しない
     A. 「検査.bat」を実行して、出たメッセージを見てください。
        Python 版を動かすには Python 3.12 と PySide6 が要ります。
        exe 版なら何も要りません。

  Q. パソコンを買い替えた / 別のパソコンでも使いたい
     A. 前のパソコンで「バックアップを書き出す（まるごと）」、
        新しいパソコンで「取り込む（バックアップから戻す）」です。

  Q. 概要欄が長すぎると言われる
     A. YouTube の概要欄は 5000 文字までです。
        人数を減らすか、「書式を編集」でリンクを減らしてください。

  Q. 間違えて削除した
     A. data.bak.json が1つ前の中身です。data.json と入れ替えて
        起動し直すと戻ります（ソフトを閉じてから入れ替えてください）。


------------------------------------------------------------------------
 7. 開発者向けメモ
------------------------------------------------------------------------

  実行     : python main.py
  検査     : 検査.bat （下の6本をまとめて走らせます）
               test_app.py          本体（出力・検索・並べ替え・画面の操作）
               test_store.py        保存と取り込み
               test_safety.py       壊れたファイル・書き込みの守り
               test_features.py     URL判別と書式
               test_features_gui.py 書式の編集画面
               test_layout.py       画面の並び（画面には出ません）
  起動確認 : python main.py --check
             （画面を出さずに、書式が読めているか・出力が作れるかまで見ます。
               exe は画面を出さない作りなので、**終了コードが物差し** です）
  exe化    : build.bat  → dist\CollabDeck\CollabDeck.exe（約 66MB）
             ★検査を通してからでないとビルドしません。
             ★--onefile にしないこと（PySide6 は LGPLv3。Qt の DLL を
               利用者が差し替えられる形で配るのが条件）。

  ファイル構成
    main.py           入口
    app_gui.py        メインウィンドウ（3列）
    model.py          データの形・検索・並び・重複・出力（全モジュールの土台）
    store.py          保存と読み込み・取り込み・書き出し
    theme.py          色と見た目（生の色コードはここにしか書かない）
    widgets.py        画面の部品（トースト・カード・並べ替え）
    import_dialog.py  取り込み画面
    import_data.py    バックアップ / CSV を読み取る
    features/         概要欄の書式と、URL からの配信サイト判別
    test_app.py       検査
