import * as path from 'path'
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 { logger } from './'

const HTML_DEFAULT_PATH = 'resources/edrawings.html'

const debug = true
const verbose = true


export const productAllTask = (grunt, product, options: any = {}, product_tasks) => {
    const slug = path.parse(product).base
    grunt.registerTask(`product-${slug}`, `laser:product-${slug}`)
    product_tasks.push(`laser:product-${slug}`)
    grunt.registerTask(`products-laser`, product_tasks)
}

export const productLaserTask = (grunt, product, options: any = {}, product_laser_tasks) => {
    const config = {}
    const slug = path.parse(product).base

    config[`product-${slug}`] = {
        src: [product],
        options: {
            clear: true,
            debug: true,
            verbose
        }
    }
    grunt.extendConfig({
        laser: config
    })
    grunt.registerTask(`product-${slug}`, `laser:product-${slug}`)

    product_laser_tasks.push(`laser:product-${slug}`)

    grunt.registerTask(`products-laser`, product_laser_tasks)
}

export const productCADTask = (grunt, product, options: any = {}, product_cad_tasks) => {
    const config = {}
    const slug = path.parse(product).base

    product = path.resolve(path.join(process.cwd(), product))
    config[`product-${slug}`] = {
        src: [`${product}/cad*/*Global*.+(SLDASM)`],
        output: '${SRC_DIR}/${SRC_NAME}.+(json|html|step|x_t)',
        options: {
            debug,
            verbose,
            onNode: (data => {
                try {
                    options.debug && logger.info(`Converted ${data.src} to ${data.target}`)
                    const parts = path.parse(data.target)

                    if (parts.ext === '.html' && parts.name.toLowerCase().indexOf('global') !== -1) {
                        if (exists(path.join(product, HTML_DEFAULT_PATH))) {
                            rm(path.join(product, HTML_DEFAULT_PATH))
                        }
                        cp(data.target, path.join(product, HTML_DEFAULT_PATH), {})
                    }
                } catch (error) {
                    logger.error(`Error copying ${data.src} to ${HTML_DEFAULT_PATH}`, error)
                }
            })
        }
    }
    grunt.extendConfig({
        cad: config
    })
    grunt.registerTask(`product-${slug}`, `cad:product-${slug}`)

    product_cad_tasks.push(`cad:product-${slug}`)

    grunt.registerTask(`products-cad`, product_cad_tasks)
}
