<?php
///////////////////////////////////////////////////////////////////////////////////////////////////
namespace P33327927\P33327927n0\Model;
///////////////////////////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////////////////////////

class P33327927n0RunProdCreate
{
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    use TraitBase;

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    public $p33327927n0;

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    public function setP33327927n0($va) { 
        $this->p33327927n0 = $va;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    public function run(
        $pa = null
    )
    {
	$eqTmp = true
	    && $this->p33327927n0->p33327927n0Cfg->eqEnableNa('prod_create')
	    ;
	if (empty($eqTmp)) { 
	    $result = null;
	} else { 
            $result = array(
                'pa' => array(
                    'pa' => $pa,
                ),
                're' => array(
                    'id1_stor' => null,
                    'va_prod_csv_invalid' => null,
                    'run_cat_create' => null,
                    //dep::'id_cat_n_0' => null,
                    //dep::'mage_cat_create_pa_va1' => null,
                    //dep::'map_na_cat_id_cat' => null,
                    'p_33327927n0_mage_prod_append_va1_color' => null,
                    'p_33327927n0_mage_prod_append_va1_size' => null,
                    'p_33327927n0_mage_prod_append_va1_attr_n_8' => null,
                    'p_33327927n0_mage_prod_append_va1_attr_n_9' => null,
                    //
                    'prod_simple' => array(
                        'mage_prod_create_pa_va1' => null,
                        'mage_cat_append_prod_map_id_cat_id1_prod_pos' => null,
                        'mage_msi_append_va_pa_va1' => null,
                        'img1' => null,
                        'p_33327927n0_mage_prod_get_va1_pa_sku1_eq_create' => null,
                    ),
                    'prod_cfg_var' => array(
                        'mage_prod_create_pa_va1' => null,
                        'mage_cat_append_prod_map_id_cat_id1_prod_pos' => null,
                        'img1' => null,
                        'append_va_err' => null,
                        'mage_msi_append_va1_catalog_inventory_stock_item' => null,
                        'map_id_stor_id1_url_rewrite' => null,
                        //'append_va_url_rewrite_err' => null,
                    ),
                    'msi_code_source' => null,
                    //
                    're_mage_url_rewrite_run_assign_unique_n_0' => null,
                    're_mage_url_rewrite_run_assign_unique_n_1' => null,
                ),
                'va' => array(
                    'va1_prod_csv' => null,
                    'id1_attr_cfg_var' => null,
                    'map_sku_p_33327927n0_va_prod1' => null,
                    'map_p_33327927n0_sku_va_prod' => null,
                    //
                    //dep::'na1_sort_cat_csv' => null,
                    //dep::'map_sku_p_33327927n0_na_cat' => null,
                    'map_sku_p_33327927n0_id1_cat' => null,
                    //
                    'va1_sku_p_33327927n0_all' => null,
                    'map_sku_p_33327927n0_all' => null,
                    //
                    'map_id_prod_p_33327927n0_sku_mage' => null,
                    'va1_sort_p_33327927n0_sku_mage' => null,
                    //
                    'va1_sort_p_33327927n0_sku_eq_new' => null,
                    'va1_sort_p_33327927n0_sku_eq_create' => null,
                    'va1_sort_p_33327927n0_sku_eq_exists' => null,
                    //
                    //dep::'map_id_cat_na_cat_mage' => null,
                    //dep::'na1_sort_cat_mage' => null,
                    //
                    'na1_cat_prod_csv_eq_create' => null,
                    'na1_cat_eq_create' => null,
                    //
                    'na1_color_prod_csv_eq_create' => null,
                    'map_na_color_i_sort_mage' => null,
                    'map_na_color_i_sort_lbl_eq_create' => null,
                    //
                    'na1_size_prod_csv_eq_create' => null,
                    'map_na_size_i_sort_mage' => null,
                    'map_na_size_i_sort_eq_create' => null,
                    //
                    'na1_attr_n_8_prod_csv_eq_create' => null,
                    'map_na_attr_n_8_i_sort_mage' => null,
                    'map_na_attr_n_8_i_sort_eq_create' => null,
                     //
                    'na1_attr_n_9_prod_csv_eq_create' => null,
                    'map_na_attr_n_9_i_sort_mage' => null,
                    'map_na_attr_n_9_i_sort_eq_create' => null,
                    //
                    'map_na_color_id_opt_all' => null,
                    'map_na_size_id_opt_all' => null,
                    'map_na_attr_n_8_id_opt_all' => null,
                    'map_na_attr_n_9_id_opt_all' => null,
                    //
                    //
                    'prod_simple' => array(
                        'map_id_cat_id1_prod' => null,
                    ),
                    'prod_cfg_var' => array(
                        'map_id_cat_id1_prod' => null,
                    ),
                    //
                    'va1_qty_msi_eq_append' => null,
                    //
                    'map_p_33327927n0_sku_id_prod_mage_on_aft' => null,
                    //
                    'map_sku_csv_id1_prod_eq_create' => null,
                    'map_id_prod_eq_create_sku_csv' => null,
                    //
                    'run_impl_n_6_prod_desc_va1_new' => null,
                ),
                'exc_warn' => null,
                'exc' => null,
            );
            try { 
                $this->runImpl(
                    $result
                );
            } catch(\Exception $ex) { 
                $this->logExc(
                    __METHOD__,
                    $ex
                );
                $result['exc'][] = array(
                    $ex->getMessage(),
                    $ex->getTraceAsString(),
                );
            }
        }
        $this->logDbg(
            __METHOD__,
            $result
        );
        return $result;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImpl(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        if (true) { 
            $result['re']['id1_stor'] = $this->p33327927n0->mage->mageStor->getId1All(
                $pa
            );
        }
        if (true) { 
            $resultTmp = $this->p33327927n0->p33327927n0ApiProyes->getVa1Prod(
                $pa
            );
            {
                if (!empty($resultTmp['exc'])) { 
                    throw new \Exception(__METHOD__);
                }
            }
            $result['va']['va1_prod_csv'] = $resultTmp['re']['va'];
        }
        if (true) { 
            $this->runImplN0(
                $result
            );
        }
        if (true) { 
            $result['va']['map_id_prod_p_33327927n0_sku_mage'] = $tmpN0 = $this->p33327927n0->p33327927n0MageProd->getMapIdProdP33327927n0Sku();
            {
                $tmpN0 = array_values(
                    $tmpN0
                );
                sort(
                    $tmpN0
                );
            }
            $result['va']['va1_sort_p_33327927n0_sku_mage'] = $tmpN0;
        }
        if (false) { //dep
            $result['va']['map_id_cat_na_cat_mage'] = $tmpN0 = $this->p33327927n0->mage->mageCat->getMapIdCatNa();
            {
                $this->runImplCatIdParent( //!::mod::map_id_cat_na_cat_mage
                    $result
                );
                $tmpN0 = array_values(
                    $tmpN0
                );
                sort(
                    $tmpN0
                );
            }
            $result['va']['na1_sort_cat_mage'] = $tmpN0;
        }
        if (true) { 
            $this->runImplN1(
                $result
            );
        }
        if (true) { 
            $this->runImplN2Cat(
                $result
            );
        }
        if (true) { 
            $this->runImplN3Attr(
                $result
            );
        }
        if (true) { 
            $result['va']['map_na_color_id_opt_all'] = $this->p33327927n0->p33327927n0MageProd->getMapNaColorIdOpt(
                $pa
            );
            $result['va']['map_na_size_id_opt_all'] = $this->p33327927n0->p33327927n0MageProd->getMapNaSizeIdOpt(
                $pa
            );
            $result['va']['map_na_attr_n_8_id_opt_all'] = $this->p33327927n0->p33327927n0MageProd->getMapNaFamilyIdOpt(
                $pa
            );
            $result['va']['map_na_attr_n_9_id_opt_all'] = $this->p33327927n0->p33327927n0MageProd->getMapNaAttrN9IdOpt(
                $pa
            );
        }
        if (true) { //::simple
            if (true) { 
                $this->runImplN4ProdSimpleCreate(
                    $result
                );
            }

            if (true) { 
                $this->runImplN5ProdSimpleAppendCat(
                    $result
                );
            }
            if (true) { 
                $this->runImplN5ProdSimpleAppendQty(
                    $result
                );
            }
        }
        if (true) { //::cfg_var
            if (true) { 
                $this->runImplN4ProdCfgVarCreate(
                    $result
                );
            }
            if (true) { 
                $this->runImplN5ProdCfgVarAppendCat(
                    $result
                );
            }
            if (true) { 
                $result['va']['map_p_33327927n0_sku_id_prod_mage_on_aft'] = $vaMapP33327927n0SkuIdProdMageOnAft = $this->p33327927n0->p33327927n0MageProd->getMapP33327927n0SkuIdProd();
            }
            if (true) { 
                $this->runImplN5ProdCfgVarAppendRel(
                    $result
                );
            }
            if (true) { 
                $this->runImplProdCfgVarAppendQty(
                    $result
                );
            }
            if (true) { 
                $this->runImplN5ProdCfgVarAppendUrlRewrite(
                    $result
                );
            }
        }
        if (true) { 
            $this->runImplId1ProdEqCreate(
                $result
            );
        }
        if (true) { 
            $this->runImplN6ProdDesc(
                $result
            );
        }
        if (true) { 
            $result['re']['re_mage_url_rewrite_run_assign_unique_n_0'] = $this->p33327927n0->mage->mageUrlKeyRunAssignUnique->runN0(
                $result['re']['id1_prod_eq_create'],
                $pa
            );
        }
        if (true) { 
            $this->runImplIndex(
                $result
            );
        }
        if (true) { //slow
            if (true) {
                $this->runImplN5ProdSimpleAppendImg(
                    $result
                );
            }
            if (true) {
                $this->runImplN5ProdCfgVarAppendImg(
                    $result
                );
            }
        }
        if (true) { //?
            $this->runImplIndex(
                $result
            );
        }
        if (true) { 
            $this->runImplOnAft(
                $result
            );
        }
        return $result;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN0(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        $vaMapProd = array();
        $vaSkuP33327927n0All = array();
        $mapSkuP33327927n0All = array();
        $na1Cat = array();
        //dep::$mapSkuNaCat = array();
        $mapSkuId1Cat = array();
        $mapP33327927n0SkuVaProd = array();
        {
            $va1Prod = $this->getOrNull(
                $result,
                'va',
                'va1_prod_csv',
                'bod'
            );
            if ($va1Prod) {
                $iSku = P33327927n0::VA['api_proyes']['get_download_csv_hdr_map_na_i']['sku'];
                $iCat = P33327927n0::VA['api_proyes']['get_download_csv_hdr_map_na_i']['id1_cat'];

                foreach($va1Prod as $vaProd) { 
                    $sku = $vaProd[
                        $iSku
                    ];
                    {
                        assert(!empty($sku));
                    }
                    $skuNormalize = $this->p33327927n0->p33327927n0VaSku->getSkuCsvNormalizePaSkuCsv(
                        $sku
                    );
                    if (false) { //dep
                        $eqN1 = true
                            && isset($vaMapProd[$skuNormalize])
                            && count($vaMapProd[$skuNormalize]) == 2
                            ;
                    }
                    $eqN0 = true
                        && !isset($vaMapProd[$skuNormalize])
                        ;
                    $vaMapProd[$skuNormalize][] = $vaProd;
                    {
                        if ($eqN0) { //::prod_cfg_var
                            $vaSkuP33327927n0All[] = $skuNormalize;
                        }
                        $skuP33327927n0 = $this->p33327927n0->p33327927n0VaSku->getSkuP33327927n0PaVaProdCsv(
                            $vaProd
                        );
                    }
                    {
                        if (isset($mapP33327927n0SkuVaProd[$skuP33327927n0])) { 
                            $result['re']['va_prod_csv_invalid'][] = array(
                                'na' => 'sku_eq_exists',
                                'p_333279279n0_sku' => $skuP33327927n0,
                            );
                            //!::overwrite
                        } else { 
                            $vaSkuP33327927n0All[] = $skuP33327927n0;
                            $mapSkuP33327927n0All[$skuNormalize][] = $skuP33327927n0;
                        }
                    }
                    if ($eqN0) {
                        $mapP33327927n0SkuVaProd[$skuNormalize] = $vaProd;
                    }
                    $mapP33327927n0SkuVaProd[$skuP33327927n0] = $vaProd;

                    if (false) { //dep
                        $vaCat = $vaProd[
                            $iCat
                        ];
                        $vaCatNormalize = $this->p33327927n0->p33327927n0VaNa->getNaCatNormalize(
                            $vaCat
                        );
                        $na1Cat[] = $vaCatNormalize;

                        $mapSkuNaCat[$skuP33327927n0] = $vaCatNormalize;
                        {
                            if ($eqN0) { 
                                $mapSkuNaCat[$skuNormalize] = $vaCatNormalize;
                            }
                        }
                    }
                    if (true) { 
                        $id1Cat = $vaProd[
                            $iCat
                        ];
                        $id1CatNormalize = array();
                        {
                            if (empty(trim($id1Cat))) { 
                                //empty
                            } else { 
                                $id1CatNormalize = explode(',', $id1Cat);
                                {
                                    foreach($id1CatNormalize as & $idCatNormalize) { 
                                        $idCatNormalize = (int)$idCatNormalize;
                                    }
                                    unset($idCatNormalize);
                                }
                            }
                        }
                        $mapSkuId1Cat[$skuP33327927n0] = $id1CatNormalize; //!::use last
                        {
                            if ($eqN0) { 
                                $mapSkuId1Cat[$skuNormalize] = $id1CatNormalize;
                            }
                        }
                    }
                }
            }
        }
        $result['va']['map_sku_p_33327927n0_va_prod1'] = $vaMapProd;
        $result['va']['map_p_33327927n0_sku_va_prod'] = $mapP33327927n0SkuVaProd;

        sort(
            $vaSkuP33327927n0All
        );
        $result['va']['va1_sku_p_33327927n0_all'] = $vaSkuP33327927n0All;
        $result['va']['map_sku_p_33327927n0_all'] = $mapSkuP33327927n0All;

        if (false) { //dep
            sort(
                $na1Cat
            );
            $na1Cat = array_unique(
                $na1Cat
            );
            $result['va']['na1_sort_cat_csv'] = $na1Cat;
            $result['va']['map_sku_p_33327927n0_na_cat'] = $mapSkuNaCat;
        }
        if (true) {
            $result['va']['map_sku_p_33327927n0_id1_cat'] = $mapSkuId1Cat;
        }
        if (true) { 
            $code1Attr = array(
                P33327927n0::VA['attr']['n_3']['na'],
                P33327927n0::VA['attr']['n_4']['na'],
            );
            $result['va']['id1_attr_cfg_var'] = $this->p33327927n0->mage->mageEav->getId1AttrPaCodeAttrIdTypEntity(
                $code1Attr,
                $this->p33327927n0->mage->mageProd->getIdTypEntity(),
                $pa
            );
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN1(
        & $result
    )
    {
        $vaN0 = array();
        $vaN1 = array();
        {
            $sku1Csv = $result['va']['va1_sku_p_33327927n0_all'];
            $va1SkuMageSort = $result['va']['va1_sort_p_33327927n0_sku_mage'];

            if ($sku1Csv) {
                foreach($sku1Csv as $skuCsv) { 
                    $eqNew = true
                        && $this->arrSearchBinary($va1SkuMageSort, $skuCsv) === false
                        ;
                    if ($eqNew) { 
                        $vaN0[] = $skuCsv;
                    } else { 
                        $vaN1[] = $skuCsv;
                    }
                }
            }
            sort($vaN0);
            sort($vaN1);
        }
        $result['va']['va1_sort_p_33327927n0_sku_eq_new'] = $vaN0;
        {
            $tmpN0 = $result['va']['va1_sort_p_33327927n0_sku_eq_new'];
            {
                if (isset(P33327927n0::VA['dbg']['len_max_sku_eq_create'])) { 
                    $tmpN0 = array_slice(
                        $tmpN0,
                        0,
                        P33327927n0::VA['dbg']['len_max_sku_eq_create']
                    );
                }
            }
            $result['va']['va1_sort_p_33327927n0_sku_eq_create'] = $tmpN0;
        }
        $result['va']['va1_sort_p_33327927n0_sku_eq_exists'] = $vaN1;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplCatIdParent( //dep
        & $result
    )
    {
        $naCatParent = $this->p33327927n0->p33327927n0Cfg->imp->get(
            'na_cat_n_0'
        );
        $mapIdCatNaCatMage = & $result['va']['map_id_cat_na_cat_mage'];

        $i = array_search(
            $naCatParent,
            $mapIdCatNaCatMage 
        );
        $eqExists = true
            && $i !== false
            ;
        if ($eqExists) { 
            $idParent = $i;
        } else { 
            $vaCat = array(
                'na' => $naCatParent,
                'id_parent' => $this->p33327927n0->mage->mageCat->getIdRoot(),
                'eq_active' => true,
            );
            $idParent = $this->p33327927n0->mage->mageCat->createPaVa(
                $vaCat
            );
            $mapIdCatNaCatMage[$idParent] = $naCatParent;
        }
        $result['re']['id_cat_n_0'] = $idParent;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN2Cat( 
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        if (true) { 
            $result['re']['run_cat_create'] = $re = $this->p33327927n0->p33327927n0RunCatCreate->run(
                $pa
            );
        }
        if (false) { //dep
            if (true) { 
                $na1CatEqCreate = array();
                {
                    $sku1EqCreate = $result['va']['va1_sort_p_33327927n0_sku_eq_create'];
                    {
                        if ($sku1EqCreate) { 
                            $mapSkuNaCat = $result['va']['map_sku_p_33327927n0_na_cat'];

                            foreach($sku1EqCreate as $skuEqCreate) { 
                                $naCat = isset($mapSkuNaCat[$skuEqCreate])
                                    ? $mapSkuNaCat[$skuEqCreate]
                                    : null
                                    ;
                                if ($naCat) { 
                                    $na1CatEqCreate[$naCat] = $naCat;
                                } else { 
                                    //::prod_cfg_var
                                }
                            }
                        }
                    }
                }
                $result['va']['na1_cat_prod_csv_eq_create'] = array_values(
                    $na1CatEqCreate
                );
            }
            if (true) { 
                $na1CatEqCreate = array();
                {
                    $na1SortCatMage = $result['va']['na1_sort_cat_mage'];

                    $tmpN0 = $result['va']['na1_cat_prod_csv_eq_create'];
                    {
                        foreach($tmpN0 as $naCat) { 
                            $eqNew = true
                                && $this->arrSearchBinaryStrIc($na1SortCatMage, $naCat) === false
                                ;
                            if ($eqNew) { 
                                $na1CatEqCreate[] = $naCat;
                            }
                        }
                    }
                }
                $result['va']['na1_cat_eq_create'] = $na1CatEqCreate;
            }
            if (true) { 
                $mapNaCatIdCat = array();
                {
                    $tmpN0 = $result['va']['map_id_cat_na_cat_mage'];
                    {
                        foreach($tmpN0 as $idCat => $naCat) { 
                            $mapNaCatIdCat[$naCat] = $idCat;
                        }
                    }
                    $tmpN0 = $result['va']['na1_cat_eq_create'];
                    {
                        $va1Cat = array();
                        {
                            $idParent = $result['re']['id_cat_n_0'];

                            foreach($tmpN0 as $naCat) { 
                                $vaCat = array(
                                    'na' => $naCat,
                                    'id_parent' => $idParent,
                                    'eq_active' => true,
                                );
                                $va1Cat[] = $vaCat;
                            }
                        }
                        $result['re']['mage_cat_create_pa_va1'] = $resultTmp = $this->p33327927n0->mage->mageCat->createPaVa1(
                            $va1Cat
                        );
                        {
                            foreach($resultTmp as $idCat => $vaCat) { 
                                $naCat = $vaCat['na'];

                                $mapNaCatIdCat[$naCat] = $idCat;
                            }
                        }
                    }
                }
                $result['re']['map_na_cat_id_cat'] = $mapNaCatIdCat;
            }
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN3Attr(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        if (true) { 
            $na1ColorEqCreate = array();
            $na1SizeEqCreate = array();
            $na1AttrN8EqCreate = array();
            $na1AttrN9EqCreate = array();
            {
                $sku1EqCreate = $result['va']['va1_sort_p_33327927n0_sku_eq_create'];
                {
                    if ($sku1EqCreate) { 
                        $mapSkuVaProd1 = $result['va']['map_sku_p_33327927n0_va_prod1'];

                        $tmpN0 = P33327927n0::VA['api_proyes']['get_download_csv_hdr_map_na_i'];
                        {
                            $iColor = $tmpN0['color'];
                            $iColorDes = $tmpN0['color_des'];
                            $iNaColor = $tmpN0['na_color'];
                            $iSize = $tmpN0['size'];
                            $iAttrN8 = $tmpN0['na_family'];
                            $iAttrN9 = $tmpN0['attr_n_9'];
                        }
                        foreach($sku1EqCreate as $skuEqCreate) { 
                            $skuCsv = $this->p33327927n0->p33327927n0VaSku->getVaCsvPaVa(
                                $skuEqCreate
                            );
                            $vaProd1 = $mapSkuVaProd1[$skuCsv];
                            {
                                foreach($vaProd1 as $vaProd) { 
                                    $vaProdColor = $vaProd[$iColor];
                                    $vaProdNaColor = $vaProd[$iNaColor];
                                    $vaProdSize = $vaProd[$iSize];
                                    $vaProdAttrN8 = trim($vaProd[$iAttrN8] ?? '');
                                    $vaProdAttrN9 = trim($vaProd[$iAttrN9] ?? '');

                                    //$naColor = $vaProdColor;  //!?
                                    //$naSize = $vaProdSize; //!?

                                    $na1ColorEqCreate[$vaProdColor] = array(
                                        $vaProdColor,
                                        $vaProdNaColor,
                                    );
                                    $na1SizeEqCreate[$vaProdSize] = $vaProdSize;

                                    if (!empty($vaProdAttrN8)) { 
                                        $na1AttrN8EqCreate[$vaProdAttrN8] = $vaProdAttrN8;
                                    }
                                    if (!empty($vaProdAttrN9)) { 
                                        $na1AttrN9EqCreate[$vaProdAttrN9] = $vaProdAttrN9;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            $result['va']['na1_color_prod_csv_eq_create'] = array_values(
                $na1ColorEqCreate
            );
            $result['va']['na1_size_prod_csv_eq_create'] = array_values(
                $na1SizeEqCreate
            );
            $result['va']['na1_attr_n_8_prod_csv_eq_create'] = array_values(
                $na1AttrN8EqCreate
            );
            $result['va']['na1_attr_n_9_prod_csv_eq_create'] = array_values(
                $na1AttrN9EqCreate
            );
        }
        if (true) { //color
            if (true) { 
                $result['va']['map_na_color_i_sort_mage'] = $this->p33327927n0->p33327927n0MageProd->getMapNaColorISort();
            }
            if (true) { 
                $mapN0 = array();
                {
                    $na1ColorEqCreateCsv = $result['va']['na1_color_prod_csv_eq_create'];
                    {
                        $mapNaColorISortMage = $result['va']['map_na_color_i_sort_mage'];

                        foreach($na1ColorEqCreateCsv as $tmpN1) { 
                            $naColorEqCreateCsv = $tmpN1[0];

                            $eqExists = true
                                && isset($mapNaColorISortMage[$naColorEqCreateCsv])
                                ;
                            if ($eqExists) { 
                                //empty
                            } else { 
                                $mapN0[$naColorEqCreateCsv] = array(
                                    'i_sort' => null, //!::i_sort===null
                                    'lbl' => $tmpN1,
                                );
                            }
                        }
                    }
                }
                $result['va']['map_na_color_i_sort_lbl_eq_create'] = $mapN0;
            }
            if (true) { 
                $mapN0 = $result['va']['map_na_color_i_sort_lbl_eq_create'];
                {
                    $va1New = array();
                    {
                        $idStorDef = $result['re']['id1_stor'][0]; //?!

                        foreach($mapN0 as $naColor => $tmpN1) { 
                            $vaNew = array(
                                'i_sort' => $tmpN1['i_sort'],
                                //
                                'map_id_stor_lbl' => array(
                                    '0' => $tmpN1['lbl'][0],
                                    "$idStorDef" => $tmpN1['lbl'][1],
                                ),
                                //?::'va_swatch' => array( 'typ' => 1, 'va' => (int)$naColor,),
                            );
                            $va1New[] = $vaNew;
                        }
                    }
                    $result['re']['p_33327927n0_mage_prod_append_va1_color'] = $this->p33327927n0->p33327927n0MageProd->appendVa1Color( //!::cache_clear
                        $va1New,
                        $pa
                    );
                    //todo::admin_ca2b17/catalog/product_attribute/save/key/19b51404bff5072ffc57a0ce3b108b0a44172f8b78f0c11a55b80b3a4e29ae3c/attribute_id/154/active_tab/main/back/edit/active_tab/main/
                    //todo::sometimes necessary to save attribute from mage admin
                }
            }
        }
        if (true) { //size
            if (true) { 
                $result['va']['map_na_size_i_sort_mage'] = $mapNaSizeISortMage = $this->p33327927n0->p33327927n0MageProd->getMapNaSizeISort();
            }
            if (true) { 
                $mapN0 = array();
                {
                    $na1SizeEqCreateCsv = $result['va']['na1_size_prod_csv_eq_create'];
                    {
                        $mapNaSizeISortMage = $result['va']['map_na_size_i_sort_mage'];

                        foreach($na1SizeEqCreateCsv as $naSizeEqCreateCsv) { 
                            $eqExists = true
                                && isset($mapNaSizeISortMage[$naSizeEqCreateCsv])
                                ;
                            if ($eqExists) { 
                                //empty
                            } else { 
                                $mapN0[$naSizeEqCreateCsv] = null; //!::i_sort===null
                            }
                        }
                    }
                }
                $result['va']['map_na_size_i_sort_eq_create'] = $mapN0;
            }
            if (true) { 
                $mapN0 = $result['va']['map_na_size_i_sort_eq_create'];
                {
                    $va1New = array();
                    {
                        foreach($mapN0 as $naSize => $iSort) { 
                            $vaNew = array(
                                'i_sort' => $iSort,
                                //
                                'map_id_stor_lbl' => array(
                                    0 => $naSize,
                                ),
                            );
                            $va1New[] = $vaNew;
                        }
                    }
                    $result['re']['p_33327927n0_mage_prod_append_va1_size'] = $this->p33327927n0->p33327927n0MageProd->appendVa1Size(
                        $va1New,
                        $pa
                    );
                }
                //todo::sometimes necessary to save attribute from mage admin (cache?)
            }
        }
        if (true) { //attr_n_8
            if (true) { 
                $result['va']['map_na_attr_n_8_i_sort_mage'] = $mapNaAttrN8ISortMage = $this->p33327927n0->p33327927n0MageProd->getMapNaAttrN8ISort();
            }
            if (true) { 
                $mapN0 = array();
                {
                    $na1AttrN8EqCreateCsv = $result['va']['na1_attr_n_8_prod_csv_eq_create'];
                    {
                        $mapNaAttrN8ISortMage = $result['va']['map_na_attr_n_8_i_sort_mage'];

                        foreach($na1AttrN8EqCreateCsv as $naAttrN8EqCreateCsv) { 
                            $eqExists = true
                                && isset($mapNaAttrN8ISortMage[$naAttrN8EqCreateCsv])
                                ;
                            if ($eqExists) { 
                                //empty
                            } else { 
                                $mapN0[$naAttrN8EqCreateCsv] = null; //!::i_sort===null
                            }
                        }
                    }
                }
                $result['va']['map_na_attr_n_8_i_sort_eq_create'] = $mapN0;
            }
            if (true) { 
                $mapN0 = $result['va']['map_na_attr_n_8_i_sort_eq_create'];
                {
                    $va1New = array();
                    {
                        foreach($mapN0 as $naAttrN8 => $iSort) { 
                            $vaNew = array(
                                'i_sort' => $iSort,
                                //
                                'map_id_stor_lbl' => array(
                                    0 => $naAttrN8,
                                ),
                            );
                            $va1New[] = $vaNew;
                        }
                    }
                    $result['re']['p_33327927n0_mage_prod_append_va1_attr_n_8'] = $this->p33327927n0->p33327927n0MageProd->appendVa1AttrN8(
                        $va1New,
                        $pa
                    );
                }
                //todo::sometimes necessary to save attribute from mage admin (cache?)
            }
        }
        if (true) { //attr_n_9
            if (true) { 
                $result['va']['map_na_attr_n_9_i_sort_mage'] = $mapNaAttrN9ISortMage = $this->p33327927n0->p33327927n0MageProd->getMapNaAttrN9ISort();
            }
            if (true) { 
                $mapN0 = array();
                {
                    $na1AttrN9EqCreateCsv = $result['va']['na1_attr_n_9_prod_csv_eq_create'];
                    {
                        $mapNaAttrN9ISortMage = $result['va']['map_na_attr_n_9_i_sort_mage'];

                        foreach($na1AttrN9EqCreateCsv as $naAttrN9EqCreateCsv) { 
                            $eqExists = true
                                && isset($mapNaAttrN9ISortMage[$naAttrN9EqCreateCsv])
                                ;
                            if ($eqExists) { 
                                //empty
                            } else { 
                                $mapN0[$naAttrN9EqCreateCsv] = null; //!::i_sort===null
                            }
                        }
                    }
                }
                $result['va']['map_na_attr_n_9_i_sort_eq_create'] = $mapN0;
            }
            if (true) { 
                $mapN0 = $result['va']['map_na_attr_n_9_i_sort_eq_create'];
                {
                    $va1New = array();
                    {
                        foreach($mapN0 as $naAttrN9 => $iSort) { 
                            $vaNew = array(
                                'i_sort' => $iSort,
                                //
                                'map_id_stor_lbl' => array(
                                    0 => $naAttrN9,
                                ),
                            );
                            $va1New[] = $vaNew;
                        }
                    }
                    $result['re']['p_33327927n0_mage_prod_append_va1_attr_n_9'] = $this->p33327927n0->p33327927n0MageProd->appendVa1AttrN9(
                        $va1New,
                        $pa
                    );
                }
                //todo::sometimes necessary to save attribute from mage admin (cache?)
            }
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    public function runImplN4ProdSimpleCreate(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        $this->logDbg(
            __METHOD__
        );
        if (true) { 
            $va1New = array();
            {
                $sku1EqCreate = $result['va']['va1_sort_p_33327927n0_sku_eq_create'];
                {
                    if ($sku1EqCreate) { 
                        $mapP33327927n0SkuVaProd = $result['va']['map_p_33327927n0_sku_va_prod'];

                        $tmpN0 = P33327927n0::VA['api_proyes']['get_download_csv_hdr_map_na_i'];
                        {
                            $iNa = $tmpN0['na'];
                            $iDescShort = $tmpN0['desc_short'];
                            //
                            $iPrice = $tmpN0['price'];
                            //
                            $iColor = $tmpN0['color'];
                            $iSize = $tmpN0['size'];
                            $iGroup = $tmpN0['group'];
                            $iBarcode = $tmpN0['barcode'];
                            $iBarcodeExternal = $tmpN0['barcode_external'];
                            $iCat = $tmpN0['id1_cat'];
                            $iQty = $tmpN0['qty'];
                            $iImg = $tmpN0['img'];
                            $iAttrN8 = $tmpN0['na_family'];
                            $iAttrN9 = $tmpN0['attr_n_9'];
                            $iColorDes = $tmpN0['color_des'];
                        }
                        $mapNaColorIdOptAll = $result['va']['map_na_color_id_opt_all'];
                        $mapNaSizeIdOptAll = $result['va']['map_na_size_id_opt_all'];
                        $mapNaAttrN8IdOptAll = $result['va']['map_na_attr_n_8_id_opt_all'];
                        $mapNaAttrN9IdOptAll = $result['va']['map_na_attr_n_9_id_opt_all'];
                        //dep::$mapSkuNaCat = $result['va']['map_sku_p_33327927n0_na_cat'];
                        $mapSkuId1Cat = $result['va']['map_sku_p_33327927n0_id1_cat'];

                        $skuPrefix = $this->p33327927n0->p33327927n0Cfg->imp->get(
                            'sku_prefix'
                        );
                        $va1SortP33327927n0SkuMage = $result['va']['va1_sort_p_33327927n0_sku_mage'];

                        $idAttrSet = $this->p33327927n0->mage->mageProd->getIdAttrSetDef(
                            $pa
                        );
                        $idWebsite = $this->p33327927n0->mage->mageWebsite->getIdDef(
                            $pa
                        );
                        foreach($sku1EqCreate as $skuEqCreate) { 
                            $eqCfgVar = $this->p33327927n0->p33327927n0VaSku->eqSkuCfgVar(
                                $skuEqCreate
                            );
                            {
                                if ($eqCfgVar) { 
                                    continue; //!
                                }
                            }
                            $skuCfgVar = $this->p33327927n0->p33327927n0VaSku->getVaCfgVarPaVa(
                                $skuEqCreate
                            );
                            if (false) { //dep
                                $eqExistsCfgVar = false
                                    || $this->arrSearchBinary($va1SortP33327927n0SkuMage, $skuCfgVar) !== false
                                    || $this->arrSearchBinary($sku1EqCreate, $skuCfgVar) !== false
                                    ;
                            }
                            $vaProd = $mapP33327927n0SkuVaProd[$skuEqCreate];
                            {
                                $naProd = $vaProd[$iNa];

                                $vaNewPrice = $vaProd[$iPrice];
                                {
                                    $vaNewPrice = (float)str_replace(',', '.', $vaNewPrice);
                                }
                                $vaNewIdOptColor = null;
                                {
                                    $naColor = $vaProd[$iColor];

                                    $vaNewIdOptColor = $mapNaColorIdOptAll[$naColor];
                                }
                                $vaNewIdOptSize = null;
                                {
                                    $naSize = $vaProd[$iSize];

                                    $vaNewIdOptSize = $mapNaSizeIdOptAll[$naSize];
                                }
                                $vaNewIdOptAttrN8 = null;
                                {
                                    $naAttrN8 = $vaProd[$iAttrN8];

                                    $vaNewIdOptAttrN8 = $mapNaAttrN8IdOptAll[$naAttrN8];
                                }
                                $vaNewIdOptAttrN9 = null;
                                {
                                    $naAttrN9 = $vaProd[$iAttrN9];

                                    $vaNewIdOptAttrN9 = $mapNaAttrN9IdOptAll[$naAttrN9];
                                }
                                if (false) { //dep
                                    $vis = $eqExistsCfgVar 
                                        ? \Magento\Catalog\Model\Product\Visibility::VISIBILITY_NOT_VISIBLE
                                        : \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH
                                        ;
                                }
                                $vis = \Magento\Catalog\Model\Product\Visibility::VISIBILITY_NOT_VISIBLE;

                                //dep::$naCat = $mapSkuNaCat[$skuEqCreate];
                                $id1Cat = $mapSkuId1Cat[$skuEqCreate];

                                $qty = (int)$vaProd[$iQty]; 

                                $img1 = $vaProd[$iImg];

                                if (true) { 
                                    $urlKeyVa = ''
                                        . $naProd
                                        . '-'
                                        . $naColor
                                        . '-'
                                        . $naSize
                                        ;
                                    $urlKey = $this->p33327927n0->mage->mageProd->getVaUrlKey(
                                        $urlKeyVa,
                                        $pa = null
                                    );
                                }
                                $skuNew = ''
                                    . $skuPrefix
                                    . $skuEqCreate
                                    ;
                                $vaNew = array(
                                    'id_typ' => 'simple',
                                    'id_attr_set' => $idAttrSet,
                                    'id_website' => $idWebsite,
                                    //
                                    'sku' => $skuNew,
                                    'status' => isset(P33327927n0::VA['dbg']['va_def_create_prod_simple_attr_status'])
                                    ? P33327927n0::VA['dbg']['va_def_create_prod_simple_attr_status']
                                    : \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED
                                    , 
                                    //
                                    'na' => $naProd,
                                    'desc_short' => $vaProd[$iDescShort],
                                    'vis' => $vis,
                                    //
                                    'price' => $vaNewPrice,
                                    'qty' => $qty,
                                    //
                                    'p_33327927n0_eq_prod' => 1,
                                    'p_33327927n0_sku' => $skuEqCreate,
                                    'p_33327927n0_color' => $vaNewIdOptColor,
                                    'p_33327927n0_color_des' => $vaProd[$iColorDes],
                                    'p_33327927n0_size' => $vaNewIdOptSize,
                                    'p_33327927n0_group' => $vaProd[$iGroup],
                                    'p_33327927n0_barcode' => $vaProd[$iBarcode],
                                    'p_33327927n0_barcode_external' => $vaProd[$iBarcodeExternal],
                                    'p_33327927n0_na_family' => $vaNewIdOptAttrN8,
                                    'manufacturer' => $vaNewIdOptAttrN9,
                                    //
                                    //dep::'na_cat' => $naCat,
                                    'id1_cat' => $id1Cat,
                                    //
                                    'img1' => $img1,
                                    //
                                    'url_key' => $urlKey."-".$skuEqCreate,
                                ); 
                                $va1New[] = $vaNew;
                            }
                        }
                    }
                }
            }
            if ($va1New) { 
                $result['re']['prod_simple']['mage_prod_create_pa_va1'] = $this->p33327927n0->mage->mageProd->createPaVa1(
                    $va1New,
                    $pa
                );
            }
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN5ProdSimpleAppendCat(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        $this->logDbg(
            __METHOD__
        );
        $mapIdCatId1Prod = array();
        {
            //dep::$mapNaCatIdCat = $result['re']['map_na_cat_id_cat'];

            $mapIdCatApiIdCatMage = $result['re']['run_cat_create']['re']['map_id_api_id_mage'];

            $reMageProdCreatePaVa1 = $result['re']['prod_simple']['mage_prod_create_pa_va1'];
            {
                if ($reMageProdCreatePaVa1) { 
                    foreach($reMageProdCreatePaVa1 as $idProd => $vaProdNew) { 
                        if (true) { 
                            $id1CatApi = $vaProdNew['id1_cat'];
                            {
                                if ($id1CatApi) { 
                                    foreach($id1CatApi as $idCatApi) { 
                                        $idCatMage = $this->getOrNull(
                                            $mapIdCatApiIdCatMage ,
                                            $idCatApi
                                        );
                                        {
                                            if (is_null($idCatMage)) { 
                                                $result['exc_warn'][] = array(
                                                    __METHOD__,
                                                    'id_cat_api::eq_exists_no',
                                                    $idCatApi,
                                                );
                                            } else if (empty($idCatMage)) { 
                                                //::eq_disable
                                            } else { 
                                                $mapIdCatId1Prod[$idCatMage][] = $idProd;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        if (false) { //dep
                            $naCat = $vaProdNew['na_cat'];
                            {
                                if ($naCat) { 
                                    $idCat = $mapNaCatIdCat[$naCat];

                                    $mapIdCatId1Prod[$idCat][] = $idProd;
                                }
                            }
                        }
                    }
                }
            }
        }
        $result['va']['prod_simple']['map_id_cat_id1_prod'] = $mapIdCatId1Prod;
        {
            if ($mapIdCatId1Prod) { 
                $pos = 0; //!?

                $paN0 = $pa;
                {
                    $paN0['eq_safe'] = true;
                }
                $result['re']['prod_simple']['mage_cat_append_prod_map_id_cat_id1_prod_pos'] = $resultTmp = $this->p33327927n0->mage->mageCat->appendProdPaMapIdCatId1ProdPos(
                    $mapIdCatId1Prod,
                    $pos,
                    $paN0
                );
                $result['exc_warn'] = $this->arrMergeNum(
                    $result['exc_warn'],
                    $resultTmp['exc']
                );
            }
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN5ProdSimpleAppendQty(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        $this->logDbg(
            __METHOD__
        );
        $va1New = array();
        {
            $reMageProdCreatePaVa1 = $result['re']['prod_simple']['mage_prod_create_pa_va1'];
            {
                if ($reMageProdCreatePaVa1) { 
                    $result['re']['msi_code_source'] = $codeSource = $this->p33327927n0->p33327927n0Cfg->imp->get(
                        'msi_code_source'
                    );
                    {
                        if (empty($codeSource)) { 
                            //!::empty
                        } else { 
                            foreach($reMageProdCreatePaVa1 as $idProd => $vaProdNew) { 
                                $qty = $vaProdNew['qty'];

                                $vaNew = array(
                                    'id_prod' => $idProd,
                                    'code_source' => $codeSource,
                                    'sku' => $vaProdNew['sku'],
                                    'qty' => $qty,
                                    'eq_stock' => $qty > 0
                                );
                                $va1New[] = $vaNew;
                            }
                        }
                    }
                }
            }
        }
        $result['va']['va1_qty_msi_eq_append'] = $va1New;
        {
            $paN0 = $pa;
            {
                $paN0['eq_safe'] = true;
                $paN0['eq_append_va_cataloginventory_stock_item'] = true;
            }
            $result['re']['prod_simple']['mage_msi_append_va_pa_va1'] = $resultTmp = $this->p33327927n0->mage->mageMsi->appendVaPaVa1(
                $va1New,
                $paN0
            );
            $result['exc_warn'] = $this->arrMergeNum(
                $result['exc_warn'],
                $resultTmp['exc']
            );
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN5ProdSimpleAppendImg(
        & $result
    )
    {
        $this->logDbg(
            __METHOD__
        );
        $pa = $result['pa']['pa'];

        $eqRun = true
            && empty($pa['eq_run_impl_prod_simple_append_img_no'])
            ;
        if ($eqRun) { 
            $this->runImplImplAppendImg(
                'prod_simple',
                $result
            );
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    public function runImplN4ProdCfgVarCreate(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        $this->logDbg(
            __METHOD__
        );
        if (true) { 
            $va1New = array();
            {
                $sku1EqCreate = $result['va']['va1_sort_p_33327927n0_sku_eq_create'];
                {
                    if ($sku1EqCreate) { 
                        $mapP33327927n0SkuVaProd = $result['va']['map_p_33327927n0_sku_va_prod'];

                        $tmpN0 = P33327927n0::VA['api_proyes']['get_download_csv_hdr_map_na_i'];
                        {
                            $iNa = $tmpN0['na'];
                            $iNaShort = $tmpN0['na_short'];
                            $iDescShort = $tmpN0['desc_short'];
                            //
                            $iGroup = $tmpN0['group'];
                            $iCat = $tmpN0['id1_cat'];
                            $iImg = $tmpN0['img'];
                            $iQty = $tmpN0['qty'];
                            $iNaFamily = $tmpN0['na_family'];
                        }
                        //dep::$mapSkuNaCat = $result['va']['map_sku_p_33327927n0_na_cat'];
                        $mapSkuId1Cat = $result['va']['map_sku_p_33327927n0_id1_cat'];

                        $skuPrefix = $this->p33327927n0->p33327927n0Cfg->imp->get(
                            'sku_prefix'
                        );
                        $va1SortP33327927n0SkuMage = $result['va']['va1_sort_p_33327927n0_sku_mage'];

                        $idAttrSet = $this->p33327927n0->mage->mageProd->getIdAttrSetDef(
                            $pa
                        );
                        $idWebsite = $this->p33327927n0->mage->mageWebsite->getIdDef(
                            $pa
                        );
                        foreach($sku1EqCreate as $skuEqCreate) { 
                            $eqCfgVar = $this->p33327927n0->p33327927n0VaSku->eqSkuCfgVar(
                                $skuEqCreate
                            );
                            {
                                if (!$eqCfgVar) { 
                                    continue; //!
                                }
                            }
                            $vaProd = $mapP33327927n0SkuVaProd[$skuEqCreate];
                            {
                                $vis = \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH;

                                $naProd = $vaProd[$iNaShort];
                                //dep::$naCat = $mapSkuNaCat[$skuEqCreate];

                                $id1Cat = $mapSkuId1Cat[$skuEqCreate];

                                $img1 = $vaProd[$iImg];

                                $skuNew = ''
                                    . $skuPrefix
                                    . $skuEqCreate
                                    ;
                                $qty = $vaProd[$iQty];

                                if (true) { 
                                    $urlKey = $this->p33327927n0->mage->mageProd->getVaUrlKey(
                                        $naProd,
                                        $pa = null
                                    );
                                }
                                $vaNew = array(
                                    'id_typ' => 'configurable',
                                    'id_attr_set' => $idAttrSet,
                                    'id_website' => $idWebsite,
                                    //
                                    'sku' => $skuNew,
                                    'status' => isset(P33327927n0::VA['dbg']['va_def_create_prod_cfg_var_attr_status'])
                                    ? P33327927n0::VA['dbg']['va_def_create_prod_cfg_var_attr_status']
                                    : \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED
                                    , 
                                    //
                                    'na' => $vaProd[$iNaShort],
                                    'desc_short' => $vaProd[$iDescShort], 
                                    'vis' => $vis,
                                    //
                                    //::'price' => null, //$vaNewPrice,
                                    'qty' => $qty, //::catalog_inventory_stock_item
                                    //
                                    'p_33327927n0_eq_prod' => 1,
                                    'p_33327927n0_sku' => $skuEqCreate,
                                    //::'p_33327927n0_color' => $vaNewIdOptColor,
                                    //::'p_33327927n0_color_des' => $vaProd[$iColorDes],
                                    //::'p_33327927n0_size' => $vaNewIdOptSize,
                                    'p_33327927n0_group' => $vaProd[$iGroup],
                                    //::'p_33327927n0_barcode' => $vaProd[$iBarcode],
                                    //::'p_33327927n0_barcode_external' => $vaProd[$iBarcodeExternal],
                                    'p_33327927n0_na_family' => $vaProd[$iNaFamily],
                                    //::'manufacturer' => $vaNewIdOptAttrN9,
                                    //
                                    //dep::'na_cat' => $naCat,
                                    'id1_cat' => $id1Cat,
                                    //
                                    'img1' => $img1,
                                    //
                                    'url_key' => $urlKey."-".$skuEqCreate,
                                ); 
                                $va1New[] = $vaNew;
                            }
                        }
                    }
                }
            }
            if ($va1New) { 
                $result['re']['prod_cfg_var']['mage_prod_create_pa_va1'] = $this->p33327927n0->mage->mageProd->createPaVa1(
                    $va1New,
                    $pa
                );
            }
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN5ProdCfgVarAppendCat(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        $this->logDbg(
            __METHOD__
        );
        $mapIdCatId1Prod = array();
        {
            //dep::$mapNaCatIdCat = $result['re']['map_na_cat_id_cat'];

            $mapIdCatApiIdCatMage = $result['re']['run_cat_create']['re']['map_id_api_id_mage'];

            $reMageProdCreatePaVa1 = $result['re']['prod_cfg_var']['mage_prod_create_pa_va1'];
            {
                if ($reMageProdCreatePaVa1) { 
                    foreach($reMageProdCreatePaVa1 as $idProd => $vaProdNew) { 
                        if (true) { 
                            $id1CatApi = $vaProdNew['id1_cat'];
                            {
                                if ($id1CatApi) { 
                                    foreach($id1CatApi as $idCatApi) { 
                                        $idCatMage = $this->getOrNull(
                                            $mapIdCatApiIdCatMage ,
                                            $idCatApi
                                        );
                                        {
                                            if (is_null($idCatMage)) { 
                                                $result['exc_warn'][] = array(
                                                    __METHOD__,
                                                    'id_cat_api::eq_exists_no',
                                                    $idCatApi,
                                                );
                                            } else if (empty($idCatMage)) { 
                                                //::eq_disable
                                            } else { 
                                                $mapIdCatId1Prod[$idCatMage][] = $idProd;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        if (false) { 
                            $naCat = $vaProdNew['na_cat'];
                            {
                                if ($naCat) { 
                                    $idCat = $mapNaCatIdCat[$naCat];

                                    $mapIdCatId1Prod[$idCat][] = $idProd;
                                }
                            }
                        }
                    }
                }
            }
        }
        $result['va']['prod_cfg_var']['map_id_cat_id1_prod'] = $mapIdCatId1Prod;
        {
            if ($mapIdCatId1Prod) { 
                $pos = 0; //!?

                $paN0 = $pa;
                {
                    $paN0['eq_safe'] = true;
                }
                $result['re']['prod_cfg_var']['mage_cat_append_prod_map_id_cat_id1_prod_pos'] = $resultTmp = $this->p33327927n0->mage->mageCat->appendProdPaMapIdCatId1ProdPos(
                    $mapIdCatId1Prod,
                    $pos,
                    $paN0
                );
                $result['exc_warn'] = $this->arrMergeNum(
                    $result['exc_warn'],
                    $resultTmp['exc']
                );
            }
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN5ProdCfgVarAppendRel(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        $this->logDbg(
            __METHOD__
        );
        if (true) { 
            $vaMapP33327927n0SkuIdProdMageOnAft = $result['va']['map_p_33327927n0_sku_id_prod_mage_on_aft'];
        }
        if (true) { 
            $reProdCfgVarErr = array();
            $reProdCfgVarAppendAll = array();
            {
                $sku1EqCreate = $result['va']['va1_sort_p_33327927n0_sku_eq_create'];
                {
                    if ($sku1EqCreate) { 
                        $mapP33327927n0SkuVaProd = $result['va']['map_p_33327927n0_sku_va_prod'];

                        $iColor = P33327927n0::VA['api_proyes']['get_download_csv_hdr_map_na_i']['color'];
                        $iSize = P33327927n0::VA['api_proyes']['get_download_csv_hdr_map_na_i']['size'];

                        foreach($sku1EqCreate as $skuEqCreate) { 
                            $eqCfgVar = $this->p33327927n0->p33327927n0VaSku->eqSkuCfgVar(
                                $skuEqCreate
                            );
                            {
                                if ($eqCfgVar) { 
                                    continue; //!
                                }
                            }
                            $skuCfgVar = $this->p33327927n0->p33327927n0VaSku->getVaCfgVarPaVa(
                                $skuEqCreate
                            );
                            $idProdSimple = $vaMapP33327927n0SkuIdProdMageOnAft[$skuEqCreate];
                            $idProdCfgVar = $vaMapP33327927n0SkuIdProdMageOnAft[$skuCfgVar];
                            {
                                $eqN0 = true
                                    && empty($reProdCfgVarAppendAll[$idProdCfgVar])
                                    ;
                                $vaAppendAttr1CfgVar = null;
                                {
                                    if ($eqN0) {
                                        $vaProd = $mapP33327927n0SkuVaProd[$skuEqCreate];
                                        {
                                            $eqColor = true
                                                && !empty($vaProd[$iColor])
                                                ;
                                            $eqSize = true
                                                && !empty($vaProd[$iSize])
                                                ;
                                        }
                                        $vaAppendAttr1CfgVar = array();
                                        {
                                            if ($eqColor) { 
                                                $vaAppendAttr1CfgVar[] = array(
                                                    'id_attr' => $result['va']['id1_attr_cfg_var'][0],
                                                    'na_attr' => P33327927n0::VA['attr']['n_3']['cfg']['lbl'], //::na_attr_mod mod lbl 
                                                );
                                            }
                                            if ($eqSize) {
                                                $vaAppendAttr1CfgVar[] = array(
                                                    'id_attr' => $result['va']['id1_attr_cfg_var'][1],
                                                    'na_attr' => P33327927n0::VA['attr']['n_4']['cfg']['lbl'], //::na_attr_mod mod lbl 
                                                );
                                            }
                                        }
                                    }
                                }
                                $vaAppend = array(
                                    'id' => $idProdSimple,
                                    'id_parent' => $idProdCfgVar,
                                    'attr1_cfg_var' =>  $vaAppendAttr1CfgVar,
                                );
                                try { 
                                    $this->p33327927n0->mage->mageProdCfgVar->appendVa(
                                        $vaAppend,
                                        $pa
                                    );
                                } catch(\Exception $ex) { 
                                    $this->logExc(
                                        __METHOD__,
                                        $ex
                                    );
                                    $result['exc_warn'][] = array(
                                        $ex->getMessage(),
                                        $ex->getTraceAsString(),
                                    );
                                    $reProdCfgVarErr[] = array(
                                        $idProdSimple,
                                        $skuEqCreate,
                                        $idProdCfgVar,
                                        $skuCfgVar,
                                        $ex->getMessage(),
                                    );
                                }
                                $reProdCfgVarAppendAll[$idProdCfgVar][] = $idProdSimple; 
                            }
                        }
                    }
                }
            }
            $result['re']['prod_cfg_var']['append_va_err'] = $reProdCfgVarErr;
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplProdCfgVarAppendQty(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        $this->logDbg(
            __METHOD__
        );
        $va1New = array();
        {
            $reMageProdCreatePaVa1 = $result['re']['prod_cfg_var']['mage_prod_create_pa_va1'];
            {
                if ($reMageProdCreatePaVa1) { 
                    foreach($reMageProdCreatePaVa1 as $idProd => $vaProdNew) { 
                        $qty = $vaProdNew['qty'];

                        $vaNew = array(
                            'id_prod' => $idProd,
                            'eq_stock' => 1, //!::$qty > 0,
                        );
                        $va1New[] = $vaNew;
                    }
                }
            }
        }
        if ($va1New) { 
            $paN0 = $pa;
            {
                $paN0['eq_safe'] = true;
            }
            $result['re']['prod_cfg_var']['mage_msi_append_va1_catalog_inventory_stock_item'] = $resultTmp = $this->p33327927n0->mage->mageMsi->appendVa1CatalogInventoryStockItem( //!::min_qty, ...
                $va1New,
                $pa
            );
            $result['exc_warn'] = $this->arrMergeNum( //!?::would show default min_qty of "0" on frontend if not found
                $result['exc_warn'],
                $resultTmp['exc']
            );
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN5ProdCfgVarAppendUrlRewrite(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        $this->logDbg(
            __METHOD__
        );
        if (true) { 
            $vaMapP33327927n0SkuIdProdMageOnAft = $result['va']['map_p_33327927n0_sku_id_prod_mage_on_aft'];
        }
        if (true) { 
            $va1Append = array();
            {
                $sku1EqCreate = $result['va']['va1_sort_p_33327927n0_sku_eq_create'];
                {
                    if ($sku1EqCreate) { 
                        $reMageProdCreatePaVa1 = $result['re']['prod_cfg_var']['mage_prod_create_pa_va1'];

                        if ($reMageProdCreatePaVa1) { 
                            foreach($reMageProdCreatePaVa1 as $idProd => $vaProd) { 
                                $vaProd = $reMageProdCreatePaVa1[$idProd];

                                $urlKey = $vaProd['url_key'];

                                $eqExists = true
                                    && isset($va1Append[$urlKey])
                                    ;
                                if ($eqExists) { 
                                    //!::ignore duplicate url keys, use fst
                                } else { 
                                    $vaAppend = array(
                                        'id_prod' => $idProd,
                                        'url_key' => $urlKey,
                                    );
                                    $va1Append[$urlKey] = $vaAppend;
                                }
                            }
                        }
                    }
                }
            }
        }
        if ($va1Append) {
            $id1Stor = $result['re']['id1_stor'];

            $reAppendVa1Prod = array();
            {
                foreach($id1Stor as $idStor) { 
                    try { 
                        if (true) {
                            $urlSuffix = $this->p33327927n0->p33327927n0Cfg->seo->get(
                                'product_url_suffix',
                                $idStor
                            );
                            foreach($va1Append as & $vaAppend) { 
                                $vaAppend['path_req'] = ''
                                    . $vaAppend['url_key']
                                    . $urlSuffix
                                    ;
                            }
                        }
                        $va1AppendEqUniq = $this->p33327927n0->mage->mageUrlRewrite->getVa1ProdEqUniqPaVa1IdStor( //!::ignore duplicate va1
                            $va1Append,
                            $idStor,
                            $pa
                        );
                        $resultTmp = $this->p33327927n0->mage->mageUrlRewrite->appendVa1ProdPaIdStor(
                            $va1AppendEqUniq,
                            $idStor,
                            $pa
                        );
                        $reAppendVa1Prod[$idStor] = $resultTmp;
                    } catch(\Exception $ex) { 
                        $this->logExc(
                            __METHOD__,
                            $ex
                        );
                        $result['exc_warn'][] = array(
                            $ex->getMessage(),
                            $ex->getTraceAsString(),
                        );
                    }
                }
            }
            $result['re']['prod_cfg_var']['map_id_stor_id1_url_rewrite'] = $reAppendVa1Prod;
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN5ProdCfgVarAppendImg(
        & $result
    )
    {
        $this->logDbg(
            __METHOD__
        );
        $pa = $result['pa']['pa'];

        $eqRun = true
            && empty($pa['eq_run_impl_prod_cfg_var_append_img_no'])
            ;
        if ($eqRun) { 
            $this->runImplImplAppendImg(
                'prod_cfg_var',
                $result
            );
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplImplAppendImg(
        $na,
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        switch($na)
        {
        case 'prod_simple':
            $vaEqNa = 0;
            break;
        case 'prod_cfg_var':
            $vaEqNa = 1;
            break;
        default:
            $this->throwNI(__FILE__, __LINE__, __METHOD__);
        }
        $va1New = array();
        {
            $reMageProdCreatePaVa1 = $result['re'][$na]['mage_prod_create_pa_va1'];
            {
                if ($reMageProdCreatePaVa1) { 
                    $urlPrefix = P33327927n0::VA['p_33327927n0_run_prod_create']['url_img_prefix'];

                    foreach($reMageProdCreatePaVa1 as $idProd => $vaProdNew) { 
                        $img1 = $vaProdNew['img1'];
                        {
                            if (empty($img1)) { 
                                //empty
                            } else { 
                                $url1Img = array();
                                {
                                    $tmpN0 = explode(',', $img1);
                                    {
                                        foreach($tmpN0 as $tmpN1) { 
                                            $urlImg = ''
                                                . $urlPrefix
                                                . $tmpN1
                                                ;
                                            if (in_array($urlImg, $url1Img)) { 
                                                //empty
                                            } else { 
                                                $url1Img[] = $urlImg;
                                            }
                                        }
                                    }
                                }
                                $va1New[$idProd] = array(
                                    'sku' => $vaProdNew['sku'],
                                    'url1_img' => $url1Img,
                                );
                            }
                        }
                    }
                }
            }
        }
        $result['va'][$na]['va1_img_eq_append'] = $va1New;

        $reProdImg1 = array();
        {
            $factProd = $this->p33327927n0->mage->factProd;

            $paN0 = $pa;
            {
                $paN0['eq_save_no'] = true;
                $paN0['mage_prod_img_get_na_fi_pa_url_ignore_prefix'] = P33327927n0::VA['p_33327927n0_run_prod_create']['url_img_prefix_eq_ignore'];
            }
            $vaNewN0 = array(
                'url' => null,
                'typ' => array('image', 'small_image', 'thumbnail'),
                'eq_visible' => true,
            );
            $vaNewOth = array(
                'url' => null,
                'typ' => array(), 
                'eq_visible' => true,
            );
            $lenRun = 0;

            foreach($va1New as $idProd => $va) { 
                try { 
                    $prod = $factProd->create();
                    {
                        if ($vaEqNa == 1) {
                            //?::$prod->setData('_edit_mode', true); 

                            $prod->setData(
                                'store_id', 
                                0
                            );
                            $prod->load(
                                $idProd
                            );
                        } else { 
                           $prod->setId($idProd);
							$prod->setData('store_id', 0);
							$prod->load($idProd);
							$prod->setSku($va['sku']);   // keep after load, in case sku differs                       
                        }
                    }
                    $lenSuc = 0;
                    {
                        foreach($va['url1_img'] as $i => $urlImg) { 
                            try { 
                                if ($i == 0) { 
                                    $va = $vaNewN0;
                                } else { 
                                    $va = $vaNewOth;
                                }
                                $va['url'] = $urlImg;

                                $this->p33327927n0->mage->mageProdImg->appendProdPaVa(
                                    $prod,
                                    $va,
                                    $paN0
                                );
                                $reProdImg1[$idProd]['url1_img_suc'][] = $urlImg;

                                $lenSuc++;
                            } catch(\Exception $ex) { 
                                $this->logExc(
                                    __METHOD__,
                                    $ex
                                );
                                $result['exc_warn'][] = array(
                                    $ex->getMessage(),
                                    $ex->getTraceAsString(),
                                );
                                $reProdImg1[$idProd]['url1_img_err'][] = $urlImg;
                            }
                        }
                    }
                    if ($lenSuc > 0) { 
                        $prod->save();
                    }
                } catch(\Exception $ex) { 
                    $this->logExc(
                        __METHOD__,
                        $ex
                    );
                    $result['exc_warn'][] = array(
                        $ex->getMessage(),
                        $ex->getTraceAsString(),
                    );
                    try { 
                        $eqExcUrlKey = true
                            && strpos($ex->getMessage(), 'URL key for specified store already exists') !== false
                            ;
                        if ($eqExcUrlKey) { 
                            $result['re']['re_mage_url_rewrite_run_assign_unique_n_1'][] = $reN0 = $this->p33327927n0->mage->mageUrlKeyRunAssignUnique->runN1(
                                $prod,
                                $pa
                            );
                            if ($reN0['re']['eq_mod']) { 
                                $prod->save();
                            }
                            $result['exc'] = $this->arrMergeNum(
                                $result['exc'],
                                $reN0['exc']
                            );
                        }
                    } catch(\Exception $ex) { 
                        $this->logExc(
                            __METHOD__,
                            $ex
                        );
                        $result['exc_warn'][] = array(
                            $ex->getMessage(),
                            $ex->getTraceAsString(),
                        );
                    }
                }
                $lenRun++;
                {
                    if ($lenRun%581 == 0) { 
                        $this->logDbg(
                            __METHOD__,
                            array(
                                $lenRun,
                                count($va1New)
                            )
                        );
                    }
                }
            }
        }
        $result['re'][$na]['img1'] = $reProdImg1;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplId1ProdEqCreate(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        $this->logDbg(
            __METHOD__
        );
        $id1ProdCreate = array();
        {
            foreach(array('prod_simple', 'prod_cfg_var') as $i => $na)  {
                $mapN0 = array();
                $mapN1 = array();        
                {
                    $tmpN0 = $result['re'][$na]['mage_prod_create_pa_va1'];
                    {
                        if ($tmpN0) { 
                            foreach($tmpN0 as $idProd => $vaProdNew) { 
                                $p33327927n0Sku = $vaProdNew['p_33327927n0_sku'];

                                if ($i == 0) { 
                                    $vaSku = $this->p33327927n0->p33327927n0VaSku->getVaPaP33327927n0Sku(
                                        $p33327927n0Sku,
                                        $pa
                                    );
                                    $skuCsv = $vaSku['sku'];
                                } else { 
                                    $skuCsv = $p33327927n0Sku;
                                }
                                $mapN0[$skuCsv][] = $idProd;
                                $mapN1[$idProd] = $skuCsv;

                                $id1ProdCreate[] = $idProd;
                            }
                        }
                    }
                }
                $result['va']['map_sku_csv_id1_prod_eq_create'][$na] = $mapN0;
                $result['va']['map_id_prod_eq_create_sku_csv'][$na] = $mapN1;
            }
        }
        $result['re']['id1_prod_eq_create'] = $id1ProdCreate;
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplN6ProdDesc(
        & $result
    )
    {
        $pa = $result['pa']['pa'];

        $this->logDbg(
            __METHOD__
        );
        $sku1EqCreate = array();
        $id1ProdEqCreate = array();
        {
            foreach($result['va']['map_sku_csv_id1_prod_eq_create'] as $tmpN0) { 
                foreach($tmpN0 as $skuCsv => $tmpN1) { 
                    $sku1EqCreate[] = $skuCsv;

                    $id1ProdEqCreate = array_merge(
                        $id1ProdEqCreate, 
                        $tmpN1
                    );
                }
            }
            sort(
                $sku1EqCreate
            );
            $sku1EqCreate = array_unique(
                $sku1EqCreate
            );
        }
        if (true) { 
            $paN0 = $pa;
            {
                $paN0['eq_safe'] = true;
            }
            $info = array(
                'exc' => null
            );
            $result['re']['prod_simple']['p_33327927n0_mage_prod_get_va1_pa_sku1_eq_create'] = $va1Prod = $this->p33327927n0->p33327927n0MageProd->getVa1PaSku1Csv(
                $sku1EqCreate,
                $paN0,
                $info
            );
            $result['exc_warn'] = $this->arrMergeNum(
                $result['exc_warn'],
                $info['exc']
            );
        }
        $va1New = array();
        {
            $mapN0 = $result['va']['map_id_prod_eq_create_sku_csv']['prod_simple'];
            $mapN1 = $result['va']['map_id_prod_eq_create_sku_csv']['prod_cfg_var'];

            foreach($id1ProdEqCreate as $idProdEqCreate) { 
                $skuCsv = null;
                {
                    if (empty($skuCsv)) { 
                        $skuCsv = $this->getOrNull(
                            $mapN0,
                            $idProdEqCreate
                        );
                    }
                    if (empty($skuCsv)) { 
                        $skuCsv = $this->getOrNull(
                            $mapN1,
                            $idProdEqCreate
                        );
                    }
                }
                if (empty($skuCsv)) { 
                    $result['exc_warn'][] = array(
                        __METHOD__,
                        'sku_csv_eq_empty',
                        $idProdEqCreate
                    );
                } else { 
                    $va = $this->getOrNull(
                        $va1Prod,
                        $skuCsv
                    );
                    if (empty($va)) { 
                        //empty
                    } else { 
                        $vaVa = $va['desc'];
                        {
                            if ($vaVa) { 
                                $vaVa = str_replace("\n", '<br>', $vaVa); //?::escape_htm
                                $vaVa = str_replace("\r", '', $vaVa); 
                            }
                        }
                        $vaNew = array(
                            'id_prod' => $idProdEqCreate,
                            'va' => $vaVa,
                        );
                        $va1New[] = $vaNew;
                    }
                }
            }
        }
        $result['va']['run_impl_n_6_prod_desc_va1_new'] = $va1New;
        {
            $this->p33327927n0->p33327927n0MageProd->setVa1Desc(
                $va1New,
                $pa
            );
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplIndex(
        & $result
    )
    {
        $this->logDbg(
            __METHOD__
        );
        $eqTmp = false
            || !empty($result['re']['prod_simple']['mage_prod_create_pa_va1'])
            || !empty($result['re']['prod_cfg_var']['mage_prod_create_pa_va1'])
            ;
        if ($eqTmp) {
            $this->p33327927n0->mage->mageIndexer->reindexAllProd(); //?::cache
        }
    }

     ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////

    private function runImplOnAft(
        & $result
    )
    {
        $this->logDbg(
            __METHOD__
        );
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //
    ///////////////////////////////////////////////////////////////////////////////////////////////////
}

///////////////////////////////////////////////////////////////////////////////////////////////////
