# File_PostProcessing.ps1
# ファイル変更後に、各ファイルに対する事後処理
#   リネーム処理を行った後に、各ファイルに対して行いたい処理があれば記述する。
#   このスクリプト以降は、プログラム側では各ファイルに対して何も行わない。

# パラメータ
#   $packageimage　保存済みのパッケージ画像ファイル名。画像を保存しない設定の場合は空文字列になることに注意
#   $renamedfiles　リネーム済みのファイル名の配列
#   $data          ファイル名の決定に使用したデータ

# パラメータ
Param([string]$packageimage,[array]$renamedfiles,[Hashtable]$data)
# 例外が起きたらそこで止める
$ErrorActionPreference = "stop"
# Write-Verboseを記録する
$VerbosePreference = "continue"

try
{
    # FC2PPV固有の処理
    #   FC2PPVは分割タイトルがそれぞれで処理されるので、パッケージ画像と.tagファイルを統一したい

    if($data["SiteName"] -eq "FC2PPV" -and $data["productcode"] -match '^(?<base>[0-9]+)_(?<sub>[0-9]+)$' -and $renamedfiles.Length -eq 1)
    {
        # .tagのファイル名
        $mytagfile =  [System.IO.Path]::ChangeExtension($renamedfiles[0], ".tag")

        # .tagの処理
        if([System.IO.File]::Exists($mytagfile))
        {
            # .tagを保存する設定になっている

            $tagfile = $mytagfile -replace $data["productcode"],$matches["base"]

            if($tagfile -ne $mytagfile)
            {
                # ファイル名に型番を含んでいた

                if(![System.IO.File]::Exists($tagfile))
                {
                    # まだタイトル用.tagが存在しない場合、このファイルの.tagを使用して全体用.tagを作成する

                    # 元データの読み込み
                    $tagdata = Get-Content  -Path $mytagfile -Raw

                    # 含まれている型番を変更
                    $tagdata = [regex]::Replace($tagdata,$data["productcode"],$matches["base"],"IgnoreCase,Singleline")

                    # [files]セクションからファイルを消す
                    $tagdata = [regex]::Replace($tagdata,'\[files\].*?1=[^\r]*',"[files]`r`n","IgnoreCase,Singleline")
                }
                else
                {
                    # 元データの読み込み
                    $tagdata = Get-Content -Path $tagfile -Raw
                }

                # [Files]セクションの最初に追加(完成後のfilesセクションの並びは不定だが、枝番で識別される)
                $tagdata = [regex]::Replace($tagdata,'\[files\].*?\r\n',"[files]`r`n"+$matches["sub"]+"="+[System.IO.Path]::GetFileName($renamedfiles[0])+"`r`n","IgnoreCase,Singleline")

                # ファイルを書き出す
                Set-Content -Path $tagfile -Value $tagdata

                # 枝番ごとの.tagを消す
                [System.IO.File]::Delete($mytagfile)
            }
        }

        # パッケージ画像の処理
        if($packageimage.Length -gt 0 -and [System.IO.File]::Exists($packageimage))
        {
            $newpackageimage = $packageimage -replace $data["productcode"],$matches["base"]

            if(![System.IO.File]::Exists($newpackageimage))
            {
                #現在の画像ファイルをコピー
                [System.IO.File]::Copy($packageimage,$newpackageimage)
            }

            # 現在のファイルは削除
            [System.IO.File]::Delete($packageimage)
            # 後続処理の矛盾をなくす
            $packageimage = $newpackageimage
        }
     }

    ##### カスタマイズスクリプトを読み込む(存在する場合)
    $customize = Join-Path (Split-Path $MyInvocation.MyCommand.Path -parent) "File_PostProcessing_customize.ps1"

    if(Test-Path $customize)
    {
        . ($customize)
    }
}
catch
{
    # エラーメッセージを出力する。
    $error[0] | Out-string | Write-Verbose
}
