import numpy as np


class HybridRanker:
    def combine(self, vector_results, keyword_results):
        vmap = {r["resume_id"]: r["vector_score"] for r in vector_results}
        kmap = {r["resume_id"]: r["keyword_score"] for r in keyword_results}

        all_ids = set(vmap.keys()) | set(kmap.keys())

        ranked = []
        for resume_id in all_ids:
            vector_score = vmap.get(resume_id, 0)
            keyword_score = kmap.get(resume_id, 0)

            final_score = (
                0.5 * self.normalize(vector_score)
                + 0.3 * self.normalize(keyword_score)
                + 0.2 * (1 if vector_score > 0 else 0)  # skill coverage stub
            )

            ranked.append({"resume_id": resume_id, "final_score": final_score})

        ranked.sort(key=lambda x: x["final_score"], reverse=True)
        return ranked[:50]

    def normalize(self, score):
        return float(score) / 100 if score > 1 else float(score)
