<?php


namespace App\Console\Commands\Export;


use Illuminate\Console\Command;

class ExportRealTopicExchangeCommand extends Command
{
    use ExportTrait;

    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'export:exchangeRealTopic';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '题库解析';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $head = [
            '题组名称',
            '题目类型',
            '题目',
            '选项A',
            '选项B',
            '选项c',
            '选项D',
            '选项E',
            '正确答案',
            '解析',
            '正确率',
            '考点'
        ];

        $directory = "E:\\鸭题库数据\\药二\\历年真题";


        $needExchangeTopics = $this->getFilesRecursively($directory);
//dd($needExchangeTopics);
        $dataCount = count($needExchangeTopics);

        $this->info('开始转换');
        $this->info("总共有：{$dataCount} 套题需要转换");
        $bar = $this->output->createProgressBar($dataCount);

        foreach ($needExchangeTopics as $needExchangeTopic) {
            $this->createdFile($needExchangeTopic['directory'], $needExchangeTopic['fileName']);
            $this->putRow($head);

            $data = file_get_contents($needExchangeTopic['data']);

            $data = json_decode($data, true);

            foreach ($data['data'] as $item) {
                //真题组名称：
                $groupName = $item['groupName'];

                $paperQuestions = $item['paperQuestionVos'];

                foreach ($paperQuestions as $value) {

                    //题目类型
                    $style = $value['style'];
                    $styleName = $this->getStyleName($style);
                    //dd($styleName);
                    //题目
                    $title = '';
                    if (!empty($value['exerciseQuestionsTopicPo'])) {
                        $title = $value['exerciseQuestionsTopicPo']['content'] . "\r\n";
                    }
                    $title = $title . $value['title'];

                    //解析
                    $explain = $value['explain'];

                    //准确率
                    $accuracy = $value['accuracy'];

                    //
                    $correctAnswerStr = ''; //正确选项Str
                    $correctAnswers = [];  //正确答案数据
                    $selectAContent = '';
                    $selectBContent = '';
                    $selectCContent = '';
                    $selectDContent = '';
                    $selectEContent = '';

                    //考点
                    $examPointStr = '';
                    $examPointNames = [];
                    $examPoints = $value['points'];
                    foreach ($examPoints as $examPoint) {
                        $examPointNames [] = $examPoint['name'];
                    }
                    $examPointStr = implode(',', $examPointNames);//考点
                    //dd($examPointStr);


                    //$answerFlag = false;

//                $answer = $data['answer'];
//
//                if (in_array($answer, $answerArray)) {
//                    $answerFlag = true; //获取answer成功
//                }


                    $questionCount = $value['questionCount']; //选项数量
                    //获取选项：
                    $questionsOptionsPos = $value['questionsOptionsPos'];

                    foreach ($questionsOptionsPos as $key => $item) {
                        if ($key == 0 && $key <= $questionCount - 1) {
                            $selectAContent = $item['option'];
                            if ($item['isTrue'] == true) {
                                $correctAnswers [] = 'A';
                            }
                        } elseif ($key == 1 && $key <= $questionCount - 1) {
                            $selectBContent = $item['option'];
                            if ($item['isTrue'] == true) {
                                $correctAnswers [] = 'B';
                            }
                        } elseif ($key == 2 && $key <= $questionCount - 1) {
                            $selectCContent = $item['option'];
                            if ($item['isTrue'] == true) {
                                $correctAnswers [] = 'C';
                            }
                        } elseif ($key == 3 && $key <= $questionCount - 1) {
                            $selectDContent = $item['option'];
                            if ($item['isTrue'] == true) {
                                $correctAnswers [] = 'D';
                            }
                        } elseif ($key == 4 && $key <= $questionCount - 1) {
                            $selectEContent = $item['option'];
                            if ($item['isTrue'] == true) {
                                $correctAnswers [] = 'E';
                            }
                        }
                    }
                    $correctAnswerStr = implode(',', $correctAnswers); //正确答案
                    //dd($correctAnswerStr);


                    $exportData = [];
                    $exportData['groupName'] = $groupName;
                    $exportData['style'] = $styleName;
                    $exportData['title'] = $title;

                    $exportData['selectA'] = $selectAContent;
                    $exportData['selectB'] = $selectBContent;
                    $exportData['selectC'] = $selectCContent;
                    $exportData['selectD'] = $selectDContent;
                    $exportData['selectE'] = $selectEContent;
                    $exportData['answer'] = $correctAnswerStr;
                    $exportData['explain'] = $explain;
                    $exportData['accuracy'] = $accuracy;
                    $exportData['point'] = $examPointStr;
                    $this->putRow($exportData);
                }


            }

            $this->closeFile();

            $bar->advance();
        }

        $bar->finish();

        $this->info('');
        $this->info('导出完成');

    }

    public function getStyleName($style)
    {
        if ($style == 6) {
            $styleName = '配伍题';
        } elseif ($style == 2) {
            $styleName = '单选题';
        } elseif ($style == 3) {
            $styleName = '多选题';
        } else {
            $styleName = $style;
        }

        return $styleName;
    }


    public function getFilesRecursively($directory) {
        // 检查目录是否存在
        if (!is_dir($directory)) {
            return "目录不存在";
        }

        // 获取目录下的所有文件和子目录
        $files = scandir($directory);

        // 过滤掉 "." 和 ".."（当前目录和上一级目录）
        $files = array_diff($files, array('.', '..'));

        $result = [];
        foreach ($files as $file) {
            // 拼接完整的文件路径
            $filePath = $directory . DIRECTORY_SEPARATOR . $file;

            // 判断是否为文件
            if (is_file($filePath)) {
                // 过滤掉文件名中包含“数据源”的文件
                if (strpos($file, '数据源') === false) {
                    // 获取文件名的主名称（去除.txt后缀）
                    $fileNameWithoutExtension = pathinfo($file, PATHINFO_FILENAME);
                    // 获取文件所在的目录路径
                    $fileDir = dirname($filePath);
                    // 获取文件的大小
                    $fileSize = filesize($filePath);
                    $result[] = [
                        'fileName' => $fileNameWithoutExtension, // 文件名（去除.txt后缀）
                        'data' => $filePath, // 完整路径
                        'directory' => $fileDir, // 文件所在目录
                        'size' => $fileSize // 文件大小
                    ];
                }
            } elseif (is_dir($filePath)) {
                // 如果是目录，则递归调用
                $result = array_merge($result, $this->getFilesRecursively($filePath));
            }
        }

        return $result;
    }


}