<?php
/**
 * UserAddress Model
 * Maps to `user_addresses` table
 */

require_once __DIR__ . '/../Core/Model.php';

class UserAddress extends Model {
    protected string $table = 'user_addresses';

    public function getByUserId(int $userId): array {
        $sql = "SELECT * FROM `user_addresses` WHERE `user_id` = :user_id ORDER BY `is_default` DESC, `id` DESC";
        return $this->fetchAll($sql, [':user_id' => $userId]);
    }

    public function getDefaultAddress(int $userId): ?array {
        $sql = "SELECT * FROM `user_addresses` WHERE `user_id` = :user_id AND `is_default` = 1 LIMIT 1";
        return $this->fetchOne($sql, [':user_id' => $userId]);
    }

    public function findUserAddress(int $addressId, int $userId): ?array {
        $sql = "SELECT * FROM `user_addresses` WHERE `id` = :id AND `user_id` = :user_id LIMIT 1";
        return $this->fetchOne($sql, [':id' => $addressId, ':user_id' => $userId]);
    }

    public function clearDefault(int $userId): void {
        $sql = "UPDATE `user_addresses` SET `is_default` = 0 WHERE `user_id` = :user_id";
        $this->query($sql, [':user_id' => $userId]);
    }

    public function setDefault(int $addressId, int $userId): bool {
        $this->clearDefault($userId);
        $sql = "UPDATE `user_addresses` SET `is_default` = 1 WHERE `id` = :id AND `user_id` = :user_id";
        $this->query($sql, [':id' => $addressId, ':user_id' => $userId]);
        return true;
    }

    public function countUserAddresses(int $userId): int {
        $sql = "SELECT COUNT(*) FROM `user_addresses` WHERE `user_id` = :user_id";
        $stmt = $this->query($sql, [':user_id' => $userId]);
        return (int)$stmt->fetchColumn();
    }
}
