/*
 * Copyright (c) 2026 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import { findDevEcoHome, hdcPath } from '../../../../../src/tool/lib/env';

export function targetArgs(deviceId: string | undefined) {
  return deviceId ? ['-t', deviceId] : [];
}

export async function resolveHdcBinary() {
  const home = await findDevEcoHome();
  if (!home) {
    return { hdc: '', home: '', error: 'DevEco Studio path not found. Set DEVECO_HOME and retry.' };
  }

  const hdc = hdcPath(home);
  if (!(await Bun.file(hdc).exists())) {
    return { hdc: '', home, error: `hdc not found: ${hdc}` };
  }

  return { hdc, home, error: '' };
}

export async function resolveHdcOrThrow() {
  const resolved = await resolveHdcBinary();
  if (resolved.error) {
    throw new Error(resolved.error);
  }

  return resolved.hdc;
}

export async function runHdc(cmd: string[]) {
  const proc = Bun.spawn({
    cmd,
    stdout: 'pipe',
    stderr: 'pipe',
  });
  const [stdout, stderr, exitCode] = await Promise.all([
    proc.stdout ? Bun.readableStreamToText(proc.stdout) : Promise.resolve(''),
    proc.stderr ? Bun.readableStreamToText(proc.stderr) : Promise.resolve(''),
    proc.exited,
  ]);

  return { stdout, stderr, exitCode };
}