/*
 * Copyright (c) 2025 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 effectKit from './@ohos.effectKit';
import image from '@ohos.multimedia.image';

function main() {
  console.log('Test effectKit start');
  const opts: image.InitializationOptions = {
    size: { width: 10, height: 10 },
    editable: true,
    pixelFormat: image.PixelMapFormat.RGBA_8888,
  };

  let pixelMap: image.PixelMap = image.createPixelMapSync(opts);
  if (pixelMap == undefined) {
    console.log('Create image.createPixelMapSync failed');
    console.log('Test effectKit end');
    return;
  }
  console.log('Create image.createPixelMapSync success');

  let headFilter: effectKit.Filter = effectKit.createEffect(pixelMap);
  if (headFilter == undefined) {
    console.log('Test createEffect failed');
  } else {
    console.log('Test createEffect success');
  }

  effectKit.createColorPicker(pixelMap).then((colorPicker: effectKit.ColorPicker) => {
    if (colorPicker != undefined) {
      console.log(`Test createColorPicker (Promise) success`);
      
      console.log('Testing getAverageColor');
      let avgColor = colorPicker.getAverageColor();
      if (avgColor !== undefined && avgColor !== null) {
        console.log(`Simple Test: getAverageColor success. Color: ${JSON.stringify(avgColor)}`);
      } else {
        console.log('Simple Test: getAverageColor returned undefined or null.');
      }

      console.log('Testing getMainColor');
      let mainColor = colorPicker.getMainColor();
      if (mainColor !== undefined && mainColor !== null) {
        console.log(`Simple Test: getMainColor success. Color: ${JSON.stringify(mainColor)}`);
      } else {
        console.log('Simple Test: getMainColor returned undefined or null.');
      }

      console.log('Testing getMainColorSync');
      let mainColorSync = colorPicker.getMainColorSync();
      if (mainColorSync !== undefined && mainColorSync !== null) {
        console.log(`Simple Test: getMainColorSync success. Color: ${JSON.stringify(mainColorSync)}`);
      } else {
        console.log('Simple Test: getMainColorSync returned undefined or null.');
      }
      
    }
  }).catch((ex: Object | null | undefined) => {
    console.log('Test createColorPicker (Promise) failed');
  });

  effectKit.createColorPicker(pixelMap, [0, 0, 5, 5]).then((colorPicker: effectKit.ColorPicker) => {
    if (colorPicker != undefined) {
      console.log(`Test createColorPicker (Promise, region) success`);
    }
  }).catch((ex: Object | null | undefined) => {
    console.log('Test createColorPicker (Promise, region) failed');
  });

  effectKit.createColorPicker(pixelMap, (error, colorPicker: effectKit.ColorPicker | undefined) => {
    if (error && error.code != 0) {
      console.log('Test createColorPicker (Callback) failed');
    } else if (colorPicker != undefined) {
      console.log('Test createColorPicker (Callback) success');
    } else {
      console.log('Test createColorPicker (Callback) failed (colorPicker = undefined)');
    }
  });

  effectKit.createColorPicker(pixelMap, [0, 0, 5, 5], (error, colorPicker: effectKit.ColorPicker | undefined) => {
    if (error && error.code != 0) {
      console.log('Test createColorPicker (Callback, region) failed');
    } else if (colorPicker != undefined) {
      console.log('Test createColorPicker (Callback, region) success');
    } else {
      console.log('Test createColorPicker (Callback, region) failed (colorPicker = undefined)');
    }
  });

  console.log('Test effectKit end');
}