<?php

class SellerProfile extends Model {
    protected string $table = 'seller_profiles';

    public function findByUserId(int $userId): ?array {
        return $this->findOneWhere(['user_id' => $userId]);
    }

    /**
     * Suspend a seller store
     */
    public function suspend(int $id, string $reason): bool {
        $stmt = $this->db->prepare("UPDATE {$this->table} SET status = 'suspended', suspended_reason = :reason, suspended_at = NOW() WHERE id = :id");
        return $stmt->execute(['id' => $id, 'reason' => $reason]);
    }

    /**
     * Unsuspend (restore to approved)
     */
    public function unsuspend(int $id): bool {
        $stmt = $this->db->prepare("UPDATE {$this->table} SET status = 'approved', suspended_reason = NULL, suspended_at = NULL WHERE id = :id");
        return $stmt->execute(['id' => $id]);
    }

    /**
     * Ban a seller store
     */
    public function ban(int $id): bool {
        $stmt = $this->db->prepare("UPDATE {$this->table} SET status = 'banned' WHERE id = :id");
        return $stmt->execute(['id' => $id]);
    }

    /**
     * Unban (restore to approved)
     */
    public function unban(int $id): bool {
        $stmt = $this->db->prepare("UPDATE {$this->table} SET status = 'approved', suspended_reason = NULL, suspended_at = NULL WHERE id = :id");
        return $stmt->execute(['id' => $id]);
    }

    /**
     * Soft delete a seller store
     */
    public function softDelete(int $id): bool {
        $stmt = $this->db->prepare("UPDATE {$this->table} SET deleted_at = NOW() WHERE id = :id");
        return $stmt->execute(['id' => $id]);
    }

    /**
     * Restore a soft-deleted seller store
     */
    public function restore(int $id): bool {
        $stmt = $this->db->prepare("UPDATE {$this->table} SET deleted_at = NULL, status = 'approved' WHERE id = :id");
        return $stmt->execute(['id' => $id]);
    }

    /**
     * Check if a seller has any orders
     */
    public function hasOrders(int $id): bool {
        $stmt = $this->db->prepare("SELECT COUNT(*) FROM orders WHERE seller_id = :id");
        $stmt->execute(['id' => $id]);
        return (int)$stmt->fetchColumn() > 0;
    }

    /**
     * Get average review rating for a seller (across all their products)
     */
    public function getAvgRating(int $sellerId): float {
        $stmt = $this->db->prepare("
            SELECT COALESCE(AVG(r.rating), 0) 
            FROM reviews r 
            JOIN products p ON r.product_id = p.id 
            WHERE p.seller_id = :sid
        ");
        $stmt->execute(['sid' => $sellerId]);
        return (float)$stmt->fetchColumn();
    }

    /**
     * Get total review count for a seller
     */
    public function getReviewCount(int $sellerId): int {
        $stmt = $this->db->prepare("
            SELECT COUNT(*) 
            FROM reviews r 
            JOIN products p ON r.product_id = p.id 
            WHERE p.seller_id = :sid
        ");
        $stmt->execute(['sid' => $sellerId]);
        return (int)$stmt->fetchColumn();
    }
}
