/*
 * Copyright (c) Huawei Device Co., Ltd. 2024-2025. All rights reserved.
 * 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 lazy { image } from '@kit.ImageKit';
import lazy { photoAccessHelper } from '@kit.MediaLibraryKit';
import lazy { FeatureManager } from '../function/core/FeatureManager';
import lazy { FunctionId } from '../function/core/functionproperty/FunctionId';
import lazy { OutputOperation } from '../function/outputswitcher/OutputOperation';
import lazy { OutputSwitcher } from '../function/outputswitcher/OutputSwitcher';
import lazy { ModeType } from '../mode/ModeType';
import lazy { getStates } from '../redux/Store';
import lazy { HiLog } from './HiLog';

const TAG: string = 'PhotoBrowserOperation';

export class PhotoBrowserOperation {

  /*
   * 传递captureId/mediaUri给大图
   * @param l157 captureId或mediaUri
   * @param pixmap 快速缩略图 可选参数
   */
  public static setCurrentMediaUri(browserController, l157?: string, pixmap?: image.PixelMap): void {
    let curMode = getStates().get<ModeType>('modeReducer', 'mode');
    HiLog.i(TAG, `setCurrentMediaUri l157: ${l157},pixmap: ${pixmap}, pixmap=${pixmap ===
      null} isEditable: ${pixmap?.isEditable}.`);
    if (!OutputOperation.isPanPhotoOutput(curMode, OutputSwitcher.getInstance().getOutput(curMode)) ||
      pixmap === null || pixmap?.isEditable === undefined) {
      HiLog.i(TAG, `setCurrentMediaUri captureid: ${l157}.`);
      browserController?.setCurrentMediaUri(l157);
      return;
    }
    HiLog.i(TAG, `setCurrentMediaUri l157: ${l157}, isEditable: ${pixmap?.isEditable}.`);
    browserController?.setCurrentMediaUri(l157, pixmap);
  }

  /**
   * 增加缩略图(注:相机需保证按序调用此接口新增缩略图)
   *
   * @param captureId 缩略图ID
   * @param pixmap 真正的缩略图
   */
  public static addThumbnail(browserController, captureId: string, pixmap: image.PixelMap): void {
    let params = new Map<string, string>();
    params.set('cameraMode', getStates().get<ModeType>('modeReducer', 'mode'));
    browserController?.addThumbnail(captureId, pixmap, false, params);
  }

  /**
   * 更新缩略图
   *
   * @param captureId 缩略图ID
   * @param photoAsset 图片基本信息
   */
  public static updateThumbnail(browserController, captureId: string, photoAsset: photoAccessHelper.PhotoAsset): void {
    browserController?.updateThumbnail(captureId, photoAsset);
  }

  /**
   * 删除缩略图(用于连拍场景的删除)
   *
   * @param captureId 缩略图ID
   */
  public static removeThumbnail(browserController, captureId: string): void {
    browserController?.removeThumbnail(captureId);
  }

}