<?php

namespace admin\action;

use \model\carmodelna;
use \model\oe;
use \model\pro\pro;

class carmodelnaAction  extends \action
{
    /**
     * @method 北美车型列表
     * @author hongzhang
     */
    public function getModelList()
    {
        $req = \mvc::$req;
        $carmodelcn = new carmodelna();
        $data = $carmodelcn->getModelList($req);
        $this->successJson($data);
    }

    /**
     * @method 生成产品（零件,商品）北美车型ebay
     * @author hongzhang
     */
    public function generateEBay()
    {
        $req = \mvc::$req;
        $type = $req['type']; // 1:零件,2:商品
        $id = $req['id'];
        $carmodelna = new carmodelna();
        $vehicleList = $carmodelna->generateEBay($type, $id);
        if (empty($vehicleList)) {
            $this->errorJson(-1, '未生成可导出的北美车型数据');
        }
        // 获取零件(商品)数据，为后续生成的xml文件命名
        $meta = [];
        if ($type == 1) {
            $oe = new oe();
            $oeData = $oe->getXMLOeInfo($req['id']);
            $meta = $oeData[0] ?? [];
        } else {
            $pro = new pro();
            $proData = $pro->getXMLProInfo($req['id']);
            $meta = $proData[0] ?? [];
        }

        $xml = new \DOMDocument('1.0', 'UTF-8');
        $xml->formatOutput = true;
        $aces = $xml->createElement('ACES');
        $aces->setAttribute('version', '3.0');
        $xml->appendChild($aces);

        $header = $xml->createElement('Header');
        $aces->appendChild($header);
        $company = $meta['pf_name'] ?? '请输入品牌名称';
        $headerData = [
            'Company' => $company,
            'SenderName' => '请输入Sender Name',
            'SenderPhone' => '请输入Sender Phone',
            'TransferDate' => date('Y-m-d'),
            'BrandAAIAID' => '请输入 Autocare Brand Code',
            'DocumentTitle' => $company,
            'EffectiveDate' => date('Y-m-d'),
            'SubmissionType' => 'Update',
            'VcdbVersionDate' => date('Y-m-d'),
            'QdbVersionDate' => date('Y-m-d'),
            'PcdbVersionDate' => date('Y-m-d'),
        ];
        foreach ($headerData as $tag => $value) {
            $header->appendChild($xml->createElement($tag, (string)$value));
        }

        $fieldMap = [
            'BaseVehicle' => 'veh_base_id',
            'SubModel' => 'veh_submodel_id',
            'BodyNumDoors' => 'body_doors_id',
            'BodyType' => 'body_type_id',
            'DriveType' => 'drive_type_id',
            'EngineBase' => 'eng_base_id',
            'Aspiration' => 'eng_aspiration_id',
            'CylinderHeadType' => 'eng_cylinder_head_id',
            'FuelType' => 'eng_fuel_id',
            'WheelBase' => 'wheelbase_id',
            'Region' => 'veh_region_id',
        ];
        $idx = 1;
        $pfName = $meta['pf_name'] ?? '';
        $partNo = $type == 1 ? ($meta['oe_oe_format'] ?? '') : ($meta['p_oe_format'] ?? '');
        foreach ($vehicleList as $row) {
            $app = $xml->createElement('App');
            $app->setAttribute('action', 'A');
            $app->setAttribute('id', (string)$idx);
            foreach ($fieldMap as $xmlTag => $dataKey) {
                $node = $xml->createElement($xmlTag);
                if (isset($row[$dataKey]) && $row[$dataKey] !== '' && $row[$dataKey] !== null) {
                    $node->setAttribute('id', (string)$row[$dataKey]);
                }
                $app->appendChild($node);
            }
            $app->appendChild($xml->createElement('Note', ''));
            $app->appendChild($xml->createElement('Qty', '1'));
            $partType = $xml->createElement('PartType');
            $partType->setAttribute('id', '58676');
            $app->appendChild($partType);
            $app->appendChild($xml->createElement('Part', $pfName . ':' . $partNo));
            $aces->appendChild($app);
            $idx++;
        }
        $footer = $xml->createElement('Footer');
        $footer->appendChild($xml->createElement('RecordCount', (string)count($vehicleList)));
        $aces->appendChild($footer);

        $fileName = $this->safeXmlFileName($pfName . '-' . $partNo . '-北美车型.xml');

        $xmlContent = $xml->saveXML();
        $encodedFileName = rawurlencode($fileName);
        header('Content-Type: application/xml; charset=UTF-8');
        header('Content-Disposition: attachment; filename="' . $encodedFileName . '"; filename*=UTF-8\'\'' . $encodedFileName);
        header('Content-Length: ' . strlen($xmlContent));
        echo $xmlContent;
        exit;
    }

    private function safeXmlFileName($name)
    {
        $name = trim((string)$name);
        if ($name === '') {
            $name = 'oe-' . date('YmdHis') . '-北美车型.xml';
        }
        $name = preg_replace('/[\\\\\\/\\:\\*\\?\\\"\\<\\>\\|]+/u', '-', $name);
        $name = preg_replace('/\\s+/u', '', $name);
        if (strtolower(substr($name, -4)) !== '.xml') {
            $name .= '.xml';
        }
        return $name;
    }

    public function proExpModelfields()
    {
        $carmodelna = new carmodelna();
        $fileds = $carmodelna->proExpModelfields;
        $data = [];
        foreach($fileds as $fk=>$fv)
        {
            $data[] = ['key'=>$fk, 'value'=>$fv['value'], 'en'=>$fv['en'], 'cn'=>$fv['cn']];
        }
        $this->successJson($data);
    }
}
