<?php

require_once 'ABaseTest.php';

class KorsupgahAdministrasiSetupTest extends BaseTest
{
    protected $token;
    protected $toolskey;

    public function setUp()
    {
        parent::setUp();
        $this->token = $this->doLogin();
        $this->toolskey = getenv("TOOLS_KEY");
    }

    public function doLogin()
    {
        $login = $this->login(getenv("TEST_ADMIN_USERNAME"), getenv("TEST_ADMIN_PASSWORD"));
        $this->assertContains(['success' => true], $login);
        return $login['data']['token'];
    }

    private function doGetRequest($url, $param)
    {
        $response = $this->client->request('GET', $url, $param);
        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), true);
        $this->assertEquals(200, $statusCode);
        return $jsonResponse;
    }

    public function testExport()
    {
        $templateId = 8;
        $url = '/v5/utility/export-administrasi-korsupgah?key='.$this->toolskey.'&template_id='.$templateId;
        $param = [
            'headers' => [
                'Authorization' => 'Bearer ' . $this->token
            ]
        ];
        $this->doGetRequest($url, $param);
        self::$messages = array_merge(self::$messages, ["testExport passed"]);
    }

    public function testImport()
    {
        $filename = 'Template Administrasi Korsupgah - Korsupgah 2023.xlsx';
        $filepath = dirname(__FILE__) . '/sample-files/' . $filename;

        $res = $this->doAPIShouldGiveSubsetResponse(
            'POST',
            '/v5/utility/import-administrasi-korsupgah?key=' . $this->toolskey,
            200,
            [
                'success' => true,
                'data' => [
                    "jumlah_area_intervensi" => 7,
                    "jumlah_indikator" => 33,
                    "jumlah_subindikator" => 80
                ]
            ],
            "testImport passed",
            [
                'multipart' => [
                    [
                        'name'     => 'document',
                        'contents' => fopen($filepath, 'r'),
                        'headers'  => ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $this->token
                ]
            ]
        );

        $data = $res['data'];
        $message = "[". $data['jumlah_area_intervensi'] ."] Area Intervensi created. [" . $data['jumlah_indikator'] . "] Indikator created. [". $data['jumlah_subindikator'] ."] Subindikator created";
        self::$messages = array_merge(self::$messages, [$message]);
    }

    public function testBulkUpdate()
    {
        $filename = 'Template Administrasi Korsupgah - Korsupgah 2023.xlsx';
        $filepath = dirname(__FILE__) . '/sample-files/' . $filename;

        $res = $this->doAPIShouldGiveSubsetResponse(
            'POST',
            '/v5/utility/bulk-update-administrasi-korsupgah?key=' . $this->toolskey,
            200,
            [
                'success' => true,
                'data' => [
                    "jumlah_area_intervensi" => 7,
                    "jumlah_indikator" => 33,
                    "jumlah_subindikator" => 80
                ]
            ],
            "testBulkUpdate passed",
            [
                'multipart' => [
                    [
                        'name'     => 'document',
                        'contents' => fopen($filepath, 'r'),
                        'headers'  => ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $this->token
                ]
            ]
        );

        $data = $res['data'];
        $message = "[". $data['jumlah_area_intervensi'] ."] Area Intervensi updated. [" . $data['jumlah_indikator'] . "] Indikator updated. [". $data['jumlah_subindikator'] ."] Subindikator updated";
        self::$messages = array_merge(self::$messages, [$message]);
    }

    public function testDownloadTemplate()
    {
        {
            $templateId = 8;
            $url = '/v5/utility/download-template-administrasi-korsupgah?key='.$this->toolskey.'&template_id='.$templateId;
            $param = [
                'headers' => [
                    'Authorization' => 'Bearer ' . $this->token
                ]
            ];
            $this->doGetRequest($url, $param);
            self::$messages = array_merge(self::$messages, ["testDownloadTemplate passed"]);
        }
    }
}
