<?php

namespace KupShop\KupShopBundle\Tests;

use KupShop\DevelopmentBundle\MailArchive;
use KupShop\KupShopBundle\Util\Mail\Email;
use KupShop\KupShopBundle\Util\Mail\EmailSender;

class MailTest extends \DatabaseTestCase
{
    /** @var MailArchive */
    private $mailArchive;
    /** @var Email */
    private $email;

    protected function setUp(): void
    {
        $this->getConnection()->getConnection()->query('set foreign_key_checks=0');
        parent::setUp();
        $this->getConnection()->getConnection()->query('set foreign_key_checks=1');

        $this->mailArchive = $this->get(MailArchive::class);
        $this->email = $this->get(Email::class);
    }

    public function testMailHeaderFooter()
    {
        $order = new \Order();
        $order->createFromDB(1);

        $order->sendEmail('testik', null);

        $email = $this->mailArchive->getLast();

        $this->assertContains('testik', $email['body']);
        $this->assertContains('Vážený zákazníku', $email['body']);
        $this->assertContains('Hezký den.', $email['body']);
    }

    public function testMailHeaderFooterInLanguage()
    {
        $order = new \Order();
        $order->createFromDB(1);
        $order->id_language = 'sk';

        $order->sendEmail('testik', null);

        $email = $this->mailArchive->getLast();

        $this->assertContains('testik', $email['body']);
        $this->assertContains('Dobrý deň,', $email['body']);
        $this->assertContains('Pekný deň praje', $email['body']);
    }

    public function testGetOrderMessages()
    {
        $messagesCZ = $this->email->getOrderMessages();
        $this->switchLanguage();
        $messagesSK = $this->email->getOrderMessages();

        $this->assertNotSame($messagesCZ[0], $messagesSK[0]);
    }

    public function testSmtpChooser()
    {
        /** @var EmailSender $emailSender */
        $emailSender = $this->get(EmailSender::class);

        $smtpSettings = [
            [
                'host' => 'mail1.wpj.cz',
                'enabled' => true,
                'allowed_senders' => 'test@wpj.cz',
            ],
            [
                'host' => 'mail2.wpj.cz',
                'enabled' => true,
                'allowed_senders' => 'joe@wpj.cz',
            ],
            [
                'host' => 'mail3.wpj.cz',
                'enabled' => true,
                'allowed_senders' => 'joe@wpj.cz',
            ],
        ];

        $smtp = $emailSender->getSMTP($smtpSettings, 'joe@wpj.cz');
        $this->assertTrue(in_array($smtp['host'], ['mail2.wpj.cz', 'mail3.wpj.cz']));
        $smtp = $emailSender->getSMTP($smtpSettings, 'neco@wpj.cz');
        $this->assertTrue(in_array($smtp['host'], ['mail1.wpj.cz']));
        $smtp = $emailSender->getSMTP($smtpSettings, 'test@wpj.cz');
        $this->assertTrue(in_array($smtp['host'], ['mail1.wpj.cz']));
    }

    protected function getDataSet()
    {
        return $this->getJsonDataSet(/* @lang JSON */ '
        {
        "languages": [
          {
            "id":"cs",
            "name":"slovenština",
            "locale":"sk_SK",
            "translate":1
          },
          {
            "id":"sk",
            "name":"slovenština",
            "locale":"sk_SK",
            "translate":1
          }
        ],
          "emails": [
              {
                "id":7,
                "order_status":null,
                "type":"BASIC_TEMPLATE",
                "position":null,
                "body":"<p>Vážený zákazníku,</p><p>{EMAIL}</p><p>Hezký den.<br>\r\nTým <a href=\"https://www.chillisport.cz\">Chillisport.cz</a></p>",
                "subject":"",
                "name":"",
                "email":"info@chillisport.cz",
                "sms":null
              },
              {
                "id":8,
                "order_status":null,
                "type":"ORDER_STATUS_CHANGE",
                "position":null,
                "body":"<p>stav Vaší objednávky číslo <strong>{KOD}</strong> byl změněn na <strong>{STAV}</strong>{KOMENTAR}.</p><p>Vaši objednávku zpracováváme a o její expedici Vás budeme informovat v dalším emailu.</p>",
                "subject":"Chillisport.cz - změna objednávky {KOD}",
                "name":"",
                "email":"",
                "sms":null
              },
              {
                "id":9,
                "order_status":null,
                "type":"ORDER_MESSAGE",
                "position":null,
                "body":"<p>stav Vaší objednávky číslo <strong>{KOD}</strong> byl změněn na <strong>{STAV}</strong>{KOMENTAR}.</p><p>Vaši objednávku zpracováváme a o její expedici Vás budeme informovat v dalším emailu.</p>",
                "subject":"Chillisport.cz - změna objednávky {KOD}",
                "name":"",
                "email":"",
                "sms":null
              }
            ],
        "emails_translations": [
          {
            "id":3,
            "id_email":7,
            "id_language":"sk",
            "id_admin":null,
            "created":"2017-09-27 16:53:38",
            "updated":null,
            "subject":null,
            "body":"<p>Dobrý deň,</p>\n\n<p>{EMAIL}</p>\n\n<p>Pekný deň praje.<br />\nTím <a href=\"https://www.chillisport.sk\">Chillisport.sk </a></p>\n",
            "email":null,
            "sms":null
          },
          {
            "id":5,
            "id_email":8,
            "id_language":"sk",
            "id_admin":5,
            "created":"2017-09-27 18:40:12",
            "updated":"2017-10-06 11:25:14",
            "subject":"Chillisport.sk - zmena objednávky č. {KOD}",
            "body":"<p>stav Vašej objednávky číslo {KÓD} bol zmenený na {STAV} {KOMENTAR}.</p>\n\n<p>Vašu objednávku spracovávame a o jej expedícii Vás budeme informovať v ďalšom emailu.</p>\n",
            "email":null,
            "sms":null
          },
          {
            "id":6,
            "id_email":9,
            "id_language":"sk",
            "id_admin":5,
            "created":"2017-09-27 18:40:12",
            "updated":"2017-10-06 11:25:14",
            "subject":"Chillisport.sk - zmena objednávky č. {KOD}",
            "body":"<p>stav Vašej objednávky číslo {KÓD} bol zmenený na {STAV} {KOMENTAR}.</p>\n\n<p>Vašu objednávku spracovávame a o jej expedícii Vás budeme informovať v ďalšom emailu.</p>\n",
            "email":null,
            "sms":null
          }
        ]
  }
');
    }
}
