// assemble.jsx — Photoshop 자동 조립 스크립트
// 사용법: Photoshop > File > Scripts > Browse > 이 파일 선택
// manifest.json 을 읽어 각 PNG를 레이어로 추가, PSD로 저장 (선택).

(function() {
    // 스크립트와 같은 폴더의 manifest.json 읽기
    var scriptFile = new File($.fileName);
    var folder = scriptFile.parent;
    var manifestFile = new File(folder + "/manifest.json");
    if (!manifestFile.exists) {
        alert("manifest.json 파일이 없습니다: " + manifestFile.fsName);
        return;
    }
    manifestFile.open("r");
    var raw = manifestFile.read();
    manifestFile.close();
    var manifest = eval("(" + raw + ")");

    var W = manifest.width;
    var H = manifest.height;

    // 새 문서 생성
    var doc = app.documents.add(W, H, 72, "matgo_mockup", NewDocumentMode.RGB,
                                DocumentFill.TRANSPARENT, 1);

    // 레이어 순서대로 import (bottom-up)
    for (var i = 0; i < manifest.layers.length; i++) {
        var L = manifest.layers[i];
        var pngFile = new File(folder + "/" + L.file);
        if (!pngFile.exists) {
            $.writeln("Missing: " + L.file);
            continue;
        }
        // place as smart object
        try {
            var idPlc = stringIDToTypeID("placeEvent");
            var desc = new ActionDescriptor();
            desc.putPath(charIDToTypeID("null"), pngFile);
            desc.putEnumerated(charIDToTypeID("FTcs"), charIDToTypeID("QCSt"), charIDToTypeID("Qcsa"));
            executeAction(idPlc, desc, DialogModes.NO);
            // 신규 placed 레이어 → 일반 레이어로 rasterize
            var newLayer = doc.activeLayer;
            newLayer.rasterize(RasterizeType.ENTIRELAYER);
            newLayer.name = L.name;
            newLayer.opacity = L.opacity;
        } catch (e) {
            $.writeln("Error placing " + L.file + ": " + e);
        }
    }

    alert("레이어 " + manifest.layers.length + "개 import 완료.\n" +
          "필요하면 File > Save As > Photoshop (.psd) 로 저장하세요.");
})();
