"""ICERTI-STORAGE-01: target-only startup guard; no fallback disk or Docker-wide changes."""
import argparse
import json
import os
from pathlib import Path
import subprocess

from deployment_kit import site, storage
from deployment_kit.core import require


def verify(site_path):
    value = site.load(site_path)
    storage.checks(value, writable=True)
    for entry in value['storage'].values():
        physical, logical = Path(entry['physical']), Path(entry['logical'])
        require(physical.exists() and logical.exists() and os.path.samefile(physical, logical),
                'VIEW_MOUNT_MISMATCH', '통합 경로와 실제 저장소가 다릅니다. 기동하지 않습니다.')
    return value


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--site', required=True)
    parser.add_argument('--compose', required=True)
    parser.add_argument('action', choices=('check','start','stop'))
    args = parser.parse_args()
    # Stop must remain available even when a disk disappeared.
    value = site.load(args.site) if args.action == 'stop' else verify(args.site)
    compose = Path(args.compose)
    require(compose.is_file() and not compose.is_symlink(), 'COMPOSE_MISSING', '고정 Compose를 찾을 수 없습니다.')
    if args.action == 'check':
        print(json.dumps(dict(status='MOUNTS_VERIFIED', stores=sorted(value['storage']))))
        return
    command = ['docker','compose','--project-name',value['project'],'-f',str(compose)]
    from deployment_kit.compose_snapshot import command_environment
    tail = (['up','-d','--no-build','--pull','never',*value['services']] if args.action == 'start'
            else ['stop','--timeout','90',*reversed(value['services'])])
    subprocess.run(command+tail, check=True, timeout=240, env=command_environment())


if __name__ == '__main__':
    main()
