<?php

require_once BASE_PATH
    . '/app/controllers/owner/OwnerBaseController.php';

require_once BASE_PATH
    . '/app/models/Contact.php';


class OwnerContactController
    extends OwnerBaseController
{
    private Contact $contactModel;


    public function __construct()
    {
        $this->requireOwner();

        $this->contactModel =
            new Contact();
    }


    public function index(): void
    {
        $search =
            trim(
                $_GET['search']
                ?? ''
            );


        $status =
            trim(
                $_GET['status']
                ?? ''
            );


        if (
            !in_array(
                $status,
                [
                    '',
                    'new',
                    'reading',
                    'replied',
                    'closed'
                ],
                true
            )
        ) {

            $status = '';
        }


        $page =
            max(
                1,
                (int)
                ($_GET['page']
                    ?? 1)
            );


        $perPage = 15;


        $totalContacts =
            $this->contactModel
                ->countForOwner(
                    $search,
                    $status
                );


        $totalPages =
            max(
                1,
                (int)
                ceil(
                    $totalContacts
                    / $perPage
                )
            );


        $page =
            min(
                $page,
                $totalPages
            );


        $contacts =
            $this->contactModel
                ->getForOwner(
                    $search,
                    $status,
                    $perPage,
                    ($page - 1)
                    * $perPage
                );


        require BASE_PATH
            . '/app/views/owner/contacts/index.php';
    }


    public function detail(): void
    {
        $id =
            (int)
            ($_GET['id']
                ?? 0);


        $contact =
            $this->contactModel
                ->findById($id);


        if (!$contact) {

            http_response_code(404);

            require BASE_PATH
                . '/app/views/errors/404.php';

            return;
        }


        if (
            $contact['status']
            === 'new'
        ) {

            $this->contactModel
                ->updateStatus(
                    $id,
                    'reading'
                );


            $contact['status'] =
                'reading';
        }


        require BASE_PATH
            . '/app/views/owner/contacts/detail.php';
    }


    public function updateStatus(): void
{
    $this->requirePost();

    $this->validateCsrf();


    $id =
        (int) (
            $_POST['contact_id']
            ?? 0
        );


    $status =
        trim(
            (string) (
                $_POST['status']
                ?? ''
            )
        );


    $allowedStatuses = [
        'new',
        'reading',
        'replied',
        'closed'
    ];


    if (
        $id <= 0
        ||
        !in_array(
            $status,
            $allowedStatuses,
            true
        )
    ) {

        $this->flashError(
            'Trạng thái liên hệ không hợp lệ.'
        );


        header(
            'Location: '
            . BASE_URL
            . '/?url=owner/contacts'
        );

        exit;
    }


    $contact =
        $this->contactModel
            ->findById($id);


    if (!$contact) {

        $this->flashError(
            'Không tìm thấy liên hệ.'
        );


        header(
            'Location: '
            . BASE_URL
            . '/?url=owner/contacts'
        );

        exit;
    }


    $this->contactModel
        ->updateStatus(
            $id,
            $status
        );


    /*
    |--------------------------------------------------------------------------
    | THÔNG BÁO THEO TRẠNG THÁI
    |--------------------------------------------------------------------------
    */

    if ($status === 'reading') {

        $this->flashSuccess(
            'Đã chuyển liên hệ sang trạng thái Đang xem.'
        );

    } elseif ($status === 'replied') {

        $this->flashSuccess(
            'Đã cập nhật liên hệ là Đã phản hồi.'
        );

    } elseif ($status === 'closed') {

        $this->flashSuccess(
            'Liên hệ đã được đóng.'
        );

    } else {

        $this->flashSuccess(
            'Đã cập nhật liên hệ.'
        );

    }


    /*
    |--------------------------------------------------------------------------
    | QUAY LẠI CHI TIẾT
    |--------------------------------------------------------------------------
    |
    | View sẽ tự:
    |
    | replied → đóng dropdown cũ, chỉ còn nút "Đóng liên hệ"
    | closed  → đóng hoàn toàn phần xử lý
    |--------------------------------------------------------------------------
    */

    header(
        'Location: '
        . BASE_URL
        . '/?url=owner/contact&id='
        . $id
    );

    exit;
}
}