"""Fixtures contain no customer data. No Docker/GPU/remote endpoint is contacted."""
from pathlib import Path
import subprocess
from deployment_kit import storage
from deployment_kit.core import canonical, sha256

IID = 'sha256:' + 'a'*64
TRT = '10.16.0'

def fixture_site(root):
    root=Path(root)
    entries={}
    for key,(target,_) in storage.LAYOUT.items():
        physical=root/'data'/key
        physical.mkdir(parents=True,exist_ok=True)
        entries[key]={'physical':str(physical),'logical':str(physical),'container':target,
                      'expected':{'target':'/','source':'/dev/test','fstype':'ext4','uuid':'test'},'allow_root':True}
    p=root/'private.env';p.write_text('EXAMPLE=fixture\n');p.chmod(0o600)
    return dict(schema=1,install_root=str(root/'install'),data_root=str(root/'data'),storage=entries,
                project='fixture',ai_ip='192.0.2.10',env_files=[str(p)],
                compose_files=['source/docker-compose.yml'],services=['postgresql','redis','analytics'],
                required_models=['RFDETRMedium'])

def inventory():
    return {'os':{'id':'ubuntu','version':'24.04','arch':'x86_64'},'docker_access':'PASS',
            'compose_version':'2.24.4','nvidia_runtime':True,'ports':[],
            'addresses':[{'ip':'192.0.2.10','interface':'eth-test','prefix':24}],
            'gpu':[{'name':'Fixture GPU','driver':'595.58.03','memory_mib':24576}]}

def mini_repo(root):
    """A real temporary local Git repo exercises tracked-source packaging."""
    root=Path(root);root.mkdir()
    files={'deployctl':'#!/usr/bin/env python3\nprint("fixture")\n','deployment_kit/__init__.py':'# fixture\n',
           'docker-compose.yml':'services: {}\n','docker/Dockerfile':'FROM scratch\n',
           'docker/entrypoint.sh':'#!/bin/sh\nexit 0\n','app/example.py':'VERSION=1\n',
           'control_sidecar/example.py':'# fixed\n','deploy/secure-bridge.compose.yml':'# actual component fixture\n',
           'deploy/web-start.compose.yml':'# last overlay\n','docker/secure-gateway-entrypoint.sh':'# media policy fixture\n',
           'docs/profiles/ltb1021/private.md':'PRIVATE_MARKER_DO_NOT_PACKAGE',
           'AGENTS.md':'DEVELOPMENT_ONLY','docs/deployment-review/HANDOFF.ko.md':'DEVELOPMENT_ONLY',
           'docs/deployment/README.ko.md':'# operator guide\n'}
    for name,data in files.items():
        p=root/name;p.parent.mkdir(parents=True,exist_ok=True);p.write_text(data)
    git(root,'init','-q');git(root,'config','user.email','fixture@example.invalid');git(root,'config','user.name','Fixture')
    git(root,'add','.');git(root,'commit','-qm','fixture')
    return root,git(root,'rev-parse','HEAD').strip()

def git(root,*args):
    return subprocess.check_output(['git','-C',str(root),*args],text=True,stderr=subprocess.DEVNULL)

def spec(sha,kind='FULL'):
    return dict(release_id='v1',kind=kind,source_sha=sha,compatibility_id='schema-1',
                images=[{'service':s,'reference':IID,'id':IID} for s in ('postgresql','redis','analytics')],
                requirements={'driver_min':'595.58.03','compose_min':'2.24.4','tensorrt_version':TRT})
