import * as path from 'path'
import * as pMap from 'p-map'
import { CONFIG_DEFAULT } from '@plastichub/osr-cli-commons'
import { resolve } from '@plastichub/osr-cli-commons/fs'
import { files } from '@plastichub/osr-cli-commons/glob'

import { sync as cp } from '@plastichub/fs/copy'
import { sync as exists } from '@plastichub/fs/exists'
import { sync as rm } from '@plastichub/fs/remove'
import { sync as read } from '@plastichub/fs/read'
import { sync as write } from '@plastichub/fs/write'

import { logger as _logger } from '@plastichub/core/debug'
import * as ExifReader from 'exifreader'
import { Logger, TTransportLogger, ILogObject } from 'tslog'
import { createStream } from "rotating-file-stream"
import { sanitize } from '@plastichub/osr-i18n/_cli'
import { translateText } from '@plastichub/osr-i18n/lib/translate'
import { IOptions as IOptionsI18n } from '@plastichub/osr-i18n/types'
import { translate } from '@plastichub/osr-i18n/lib/translate'
import { resize, getResizePatterns, format, getFormats, meta } from '@plastichub/osr-media/lib/media/images'

import {
    ENABLED_PRODUCTS, I18N_SOURCE_LANGUAGE, I18N_STORE,
    LANGUAGES,
    OSRL_ENV, OSRL_LANG_FLAVOR,
    OSRL_MODULE_NAME, OSR_ROOT, PRODUCTS_TARGET_SRC, PRODUCT_CONFIG, PRODUCT_HUGO_TEMPLATE, OSRL_PRODUCT_PROFILE, PRODUCT_ROOT, PRODUCT_DIR,
    OSRL_ENVIRONMENT,
    RETAIL_LOG_LEVEL_I18N_PRODUCT_ASSETS,
    TASK_CONFIG_LOG_DIRECTORY
} from './config'


import { GalleryImage } from './images'

const debug = false
const verbose = true

const logger = _logger('ph-site')
const IMAGES_GLOB = '*.+(JPG|jpg|png|PNG|gif)'

const _convertProductMedia = true
const _translateProductAssets = true
const _populateProductDefaults = true


export const createSubLogger = (root: Logger, level: string, name: string): Logger => {

    const ret = root.getChildLogger({
        name,
        type: "pretty",
        displayInstanceName: true,
        displayFilePath: 'hidden',
        instanceName: name,
        displayFunctionName: true,
        displayRequestId: true,
        displayLogLevel: true,
        colorizePrettyLogs: true,
        hostname: "osr-cli",
        displayLoggerName: true,
        displayTypes: false,
        prefix: ["\n\t "],
    })

    const logFile = path.resolve(resolve(`${TASK_CONFIG_LOG_DIRECTORY}/${name}.log`))
    const stream = createStream(logFile,
        {
            size: "10M", // rotate every 10 MegaBytes written
            interval: "1d", // rotate daily
            compress: "gzip", // compress rotated files
        });

    const transport = {
        minLevel: level,
        transportLogger: {
            info: (logObject: ILogObject) => {
                stream.write(JSON.stringify(logObject, null, 2) + "\n");
            }
        }
    }
    logger.attachTransport(transport.transportLogger as any, level as any)
    return logger
}

export const writeTaskConfig = (taskName, config: any) => {
    const file = path.resolve(resolve(`${TASK_CONFIG_LOG_DIRECTORY}/${taskName}.json`))
    write(file, JSON.stringify(config, null, 2))
}