<?php


namespace app\controllers;

use app\models\Auctions;
use app\models\Images;
use Yii;
use app\models\Publishing;
use app\models\Files;
use yii\web\UploadedFile;
use app\models\PublishingSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use SoapClient;
use ZipArchive;


class PublishingController extends Controller
{
    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['post'],
                ],
            ],
        ];
    }

    public function actionIndex()
    {
        $searchModel = new PublishingSearch();

        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

       // $model = $this->findModel($id);
       // $images = Images::find()->where(['lot_id' => $model->lot_id])->all();

        $dataProvider->pagination->defaultPageSize = 8;
        $dataProvider->pagination->pageSize = 8;

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
            //'model' => $this->findModel($id),
            //'images' => $images,
        ]);
    }

    public function actionView($id)
    {

        $model = $this->findModel($id);

        if (Yii::$app->request->post()&&Yii::$app->user->can('admin'))
        {
            $files = new Files();
            $file = UploadedFile::getInstance($files, 'file');
            $file->name = $files->transliteration($file->name);
            $files->name = $file->name;
            $path = Yii::$app->params['uploadPath'].$file->name;

            $file->saveAs($path); // save file on server
            $files->saveFile([
                'name'=>$file->name,
                'path'=>Yii::$app->params['uploadPath'],
                'user_id'=>Yii::$app->user->identity->id,
                'lot_id' => $model->lot_id,
                'auction_id'=>$model->id]);

            Yii::$app->session->setFlash('success', Yii::t('app', 'FileUploaded ID'));
            $model->setAttribute('status','4');
            $model->save(false);
        }
        return $this->render('view', [
            'model' => $this->findModel($id),
        ]);
    }

    public function actionDoc($id)
    {
        $model = $this->findModel($id);

        //все учасники, 0 - победитель
        $members = $this->getClients($model->id);

        //логи торгов, 0 - победитель
        $tradeLog = $this->getTradeLog($model->id);
/*        
        print_r($members);
        print_r($tradeLog[0]);
        print_r($model);

        print_r($model->lot->attributes);

        //организатор
        print_r($model->profile->attributes);
        // print_r($model->user->attributes);


        echo $model->NDS.'<<<'.$model->id;
*/

        $str_members = "";
        foreach($members as $n=>$member){
            $c = $n+1;
            $str_members .= "</w:t><w:br/><w:t>№$c:" . $member['at_org'] . " в особі Директора " . 
                $member['fio'] . "</w:t><w:br/><w:t> Код ЄДРПОУ " . 
                $member['inn'] . "</w:t><w:br/><w:t> Юридична адреса: " . 
                $member['u_address'] . "</w:t><w:br/><w:t> Електронна адреса: " . $member['member_email'] . "</w:t><w:br/><w:t>";
        }
        

        $fio = "";
        if(empty($model->profile->fio)){
            $fio = $model->user->fio;
            if(empty($fio)){
                $fio = "name name name";
            }
        } else {
            $fio = $model->profile->fio;
        }
        
        $fio = explode(" ", $fio);
        if(count($fio) > 2){
            $iof = mb_substr($fio[1], 0, 1) . ". " . mb_substr($fio[2], 0, 1) . ". " . $fio[0];
        } else {
            $iof = (string)$fio[0];
        }

        $winner_proposition = 0;
        if(!empty(isset($tradeLog[0]))){
            preg_match("/\d+(?:\.\d+)?/", $tradeLog[0]['comment'], $m );
            $winner_proposition = $m[0];
        }

        $winner = "</w:t><w:br/><w:t>№$c:" . $members[0]['at_org'] . " в особі Директора " . 
                $members[0]['fio'] . "</w:t><w:br/><w:t> Код ЄДРПОУ " . 
                $members[0]['inn'] . "</w:t><w:br/><w:t>";

        
        $winner_fio = explode(" ", $members[0]['fio']);
        if(count($winner_fio) > 2){
            $winner_iof = mb_substr($winner_fio[1], 0, 1) . ". " . mb_substr($winner_fio[2], 0, 1) . ". " . $winner_fio[0];
        } else {
            $winner_iof = (string)$winner_fio[0];
        }

        $data = [
            '{protocol_organizator_org}' => $model->profile->at_org,
            '{protocol_organizator_fio}' => $model->profile->fio,
            '{protocol_organizator_iof}' => $iof,
            '{protocol_date}' => $model->date_start,///.'«19» грудня 2025 р.',
            '{protocol_number}' => $model->date_start . "-" . $model->lot_num,/// . 'переколбасить',
            '{protocol_start_date}' => $model->date_start,// .'«19» грудня 2025 р. о 10-30',
            '{protocol_lot_number}' => $model->lot_num,
            '{protocol_lot_name}' => $model->lot->name,
            '{protocol_lot_description}' => $model->lot->description,
            '{protocol_organizator_inn}' => $model->profile->inn,
            '{protocol_organizator_uaddress}' => $model->profile->u_address,
            '{protocol_organizator_email}' => $model->profile->member_email,
            '{protocol_members}' => $str_members,
            '{protocol_lotprice}' => Yii::$app->num2text->moneyFormatted($model->lotPrice) . " " . $model->NDS, ///number_format($model->lotPrice,2)
            '{protocol_lotstep}' => round($model->lotStep) . "% = " . Yii::$app->num2text->moneyFormatted($model->lotPrice * $model->lotStep / 100),
            '{protocol_organizator_proposition}' => Yii::$app->num2text->moneyFormatted($model->lotPrice * $model->lotStep / 100),
            '{protocol_winner_proposition}' => Yii::$app->num2text->moneyFormatted($winner_proposition),
            '{protocol_winner}' => $winner,
            '{protocol_winner_uaddress}' => $members[0]['u_address'],
            '{protocol_winner_iof}' => $winner_iof
            
        ];

        $file = Yii::$app->templater->process($data);
        return Yii::$app->response->sendFile($file);


//         $str_members = null;
//         $count_members = null;
//         $k = 1;
//         foreach ($members as $n => $value)
//         {
//             $str_members = $str_members.$k.'. '.$value['at_org'].",\n\r ";

//            // var_dump(is_countable($str_members.$k.'. '.$value['at_org'].", код ЭДРПОУ, адреса\n\r "));
//           //var_dump($str_members.$k.'. '.$value['at_org'].", код ЭДРПОУ, адреса\n\r ") ; die();
//             //phpinfo();

//             $count_members += count( $str_members.$k.'. '.$value['at_org'].", код ЭДРПОУ, адреса\n\r ");

//             $k++;
//         }

//         $tradeLog = $this->getTradeLog($model->id); $str_log=null; //var_dump($tradeLog); exit;

//         foreach ($tradeLog as $n => $value)
//         {
//             $str_log = $str_log.$value['date']." ".$value['comment']." ".$value['at_org']."
//             ";
//         }


//         $word = new \PhpOffice\PhpWord\PhpWord();
//         $word->setDefaultFontSize(12);
//         $word->setDefaultFontName('Times New Roman');
//         $word->addFontStyle('fs1', [
//             'size' => '12',
//             'bold' => true,
//         ]);
//         $styleTable = array('borderColor'=>'006699',
//             'borderSize'=>6,
//             'cellMargin'=>50,
//             'valign'=>'center'
//         );
//         $word->addTableStyle('tableStyle',$styleTable);

//         $section = $word->addSection();
//         $section->addTextRun(['align'=>'center'])->addText('Протокол № ');
//         $section->addTextRun(['align'=>'center'])->addText('про проведення аукціону');
//         $section->addTextRun(['align'=>'center'])->addText('');
//         $section->addTextRun()->addText('Дата складання протоколу: «_'.date('d',time()).'_» __'.date('m',time()).'__ 2017 року');
//         $section->addTextRun(['align'=>'center'])->addText('');
//         $section->addTextRun()->addText('Даний протокол складено організатором відкритих електронних торгів Товарна біржа, про те, що відповідно до Додаткової угоди №___ про співпрацю з організації продажу активів від _____ р. проведено електронні торги по лоту № '.$model->lot_num);
//         $section->addTextRun(['align'=>'center'])->addText('');

//         //таблица
//         $table = $section->addTable('tableStyle');
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('1');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Організатор аукціону:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Товарна біржа Юридична та фактична адреса: 04071, Україна, м.Київ; Ідентифікаційний код: 12345678 ');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('2');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Реквізити організатора аукціону:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Поточний рахунок № 2600900000000 в ПАТ «ПРОКРЕДИТ БАНК» у м. Києві; МФО: 320984');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('3');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Дата та час початку аукціону:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText(''.$model->date_start.'');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('4');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Дата та час закінчення аукціону:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText(''.$model->date_stop.'');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('5');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Місце проведення аукціону:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('6');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Адреси веб-сайтів, на яких розміщено відомості про проведення аукціону:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('');

//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('7');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Номер лоту :');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText(''.$model->lot_num.'');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('8');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Власник майна (Продавець):');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('9');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Майно, що запропоноване для продажу:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('10');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Місцезнаходження майна:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('11');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Стартова (початкова) вартість лоту, грн. без ПДВ/ПДВ:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText(''.number_format($model->lotPrice,2)." ".$model->NDS.'');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('12');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Гарантійний внесок переможця аукціону:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('13');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Крок аукціону:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText(''.$model->lotStep.'');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('14');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Кількість учасників аукціону:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText(''.$count_members.'');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('15');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Учасники аукціону:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText(''.$str_members.'');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('16');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Найменування і місцезнаходження (для юридичної особи), прізвище, ім’я, по батькові і місце проживання (для фізичної особи) переможця торгів');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('17');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Ціна продажу:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText(''.$model->last_price.'');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('18');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Сума винагороди організатора аукціону, що утримується організатором аукціону з гарантійного внеску:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('19');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Сума, що підлягає сплаті Організатором аукціону продавцю:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('20');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Сума, що підлягає сплаті Переможцем аукціону Продавцю:');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('');
//         //--
//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('21');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Номер банківського рахунку, на який мають бути перераховані кошти за придбане майно');
//         $table->addCell(4000, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('');
//         //-----------------------------need foreach
//         $tradeLog = $this->getTradeLog($model->id);
//         $str_log=null;
//         $str_date=null;
//         $str_name=null;
//         $section->addTextRun(['align'=>'center'])->addText('Пропозиції учасників аукціону:');

//         $table = $section->addTable('tableStyle');

//         $table->addRow(500);
//         $table->addCell(700, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('');
//         $table->addCell(2666, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('Ціна пропозиції','fs1');
//         $table->addCell(2666, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('Час подачі','fs1');
//         $table->addCell(2666, ['valign' => 'center'])->addTextRun(['align'=>'center'])->addText('Учасник','fs1');
//         //--

//         foreach ($tradeLog as $n => $value) {
//             //$str_log = $str_log.$value['comment']."\r\n";
//             $str_log .= str_replace('Прийнята нова цінова пропозиція -', '', $value['comment']) . "\r\n";
//             $str_date .= $value['date'] . "\r\n";
//             $str_name = $str_name . $value['at_org'] . "\r\n";

//             $str_log == null ? $tradeLog[0]['at_org'] = '' : '';


//             $table->addRow(500);
//             $table->addCell(700, ['valign' => 'center'])->addTextRun(['align' => 'center'])->addText('');
//             $table->addCell(2900, ['valign' => 'center'])->addTextRun(['align' => 'center'])->addText('' . str_replace('Прийнята нова цінова пропозиція -', '', $value['comment']) . '');
//             $table->addCell(2900, ['valign' => 'center'])->addTextRun(['align' => 'center'])->addText('' . $value['date'] . '');
//             $table->addCell(2900, ['valign' => 'center'])->addTextRun(['align' => 'center'])->addText('' . $value['at_org'] . '');
//         }
//         //--

//         //--

//         $section->addTextRun(['align'=>'left'])->addText('');
//         $section->addTextRun(['align'=>'left'])->addText('       Переможець аукціону повинен підписати протокол, договір купівлі-продажу придбаного активу та провести повний розрахунок з продавцем протягом 10 календарних днів з дня наступного після закінчення аукціону. 
//         В разі не виконання учасником-переможцем аукціону умов протоколу, аукціон буде визнаний таким, що не відбувся. 
//         Цей протокол складений в 4 (чотирьох) примірниках, які мають однакову юридичну силу: 1 (один) примірник – Продавцю, 1 (один) примірник – переможцю аукціону (Покупцю), 1 (один) примірник – Організатору аукціону, 1 (один) примірник – нотаріусу, який буде посвідчувати договір купівлі-продажу.');
//         $section->addTextRun(['align'=>'left'])->addText('');

//         $table = $section->addTable('tableStyle');
//         $table->addRow(500);
//         $table->addCell(4350, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Організатор аукціону: 
// Товарна біржа «Українська 
// міжрегіональна спеціалізована», 
// в особі в. о. директора');
//         $table->addCell(4350, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('____________________ /Р.В. Широких/');
//         //--
//         $table->addRow(500);
//         $table->addCell(4350, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('Переможець аукціону:
        
// Директор ТОВ «»');
//         $table->addCell(4350, ['valign' => 'center'])->addTextRun(['align'=>'left'])->addText('____________________ /');
//         //--




//         header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
//         header('Content-Disposition: attachment;filename="Протокол.docx"');
//         header('Cache-Control: max-age=0');
//         $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($word,'Word2007');
//         $objWriter->save('php://output');


    }
    private function assocArrayToArrayOfArrayOfString ($assoc)
    {
        $arrayKeys   = array_keys($assoc);
        $arrayValues = array_values($assoc);
        return array ($arrayKeys, $arrayValues);
    }
    private function getTradeLog($id)
    {
        $log = Yii::$app->db->createCommand("
                                SELECT trade_logs.comment, trade_logs.date, user.at_org from trade_logs
                                LEFT JOIN user ON (trade_logs.user_id=user.id)
                                WHERE auk_id=:id ORDER by date DESC");
        $log->bindValue(':id', $id);
        $result = $log->queryAll();
        return $result; //$result['0']['at_org'];
    }
    private function getClients($id)
    {
        $clients =Yii::$app->db->createCommand("SELECT 
                                                    bidding.id, 
                                                    user.at_org,
                                                    profile.fio,
                                                    profile.inn,
                                                    profile.u_address,
                                                    profile.member,
                                                    profile.member_email,
                                                    profile.phone
                                                FROM bidding
                                                LEFT JOIN user 
                                                    ON bidding.user_id = user.id
                                                LEFT JOIN profile 
                                                    ON profile.user_id = user.id
                                                WHERE 
                                                    bidding.auction_id = :id 
                                                AND bidding.status = 1;");
        $clients->bindValue(':id', $id);
        $result = $clients->queryAll();
        return $result;

    }
    protected function findModel($id)
    {
        if (($model = Publishing::findOne($id)) !== null) {
            return $model;
        } else {
            throw new NotFoundHttpException('The requested page does not exist.');
        }
    }


}

