from __future__ import annotations
from typing import TYPE_CHECKING

from models.targets.target import *

if TYPE_CHECKING:
    from models.problem import Problem

class TccTarget(Target):
    def constraints(self, problem_handler: Problem, solver_run: SolverRun):
        problem_handler.problem += lpSum([
            bundle.trf(solver_run.irt_model, self.theta)
            * problem_handler.solver_bundles_var[bundle.id]
            for bundle in problem_handler.bundles
        ] + [
            item.irf(solver_run.irt_model, self.theta) *
            problem_handler.solver_items_var[item.id]
            for item in problem_handler.items
        ]) >= self.minimum(
        ), f'Min TCC theta({self.theta}) at target {self.value} with a drift % of {self.drift}'

        problem_handler.problem += lpSum([
            bundle.trf(solver_run.irt_model, self.theta)
            * problem_handler.solver_bundles_var[bundle.id]
            for bundle in problem_handler.bundles
        ] + [
            item.irf(solver_run.irt_model, self.theta) *
            problem_handler.solver_items_var[item.id]
            for item in problem_handler.items
        ]) <= self.maximum(
        ), f'Max TCC theta({self.theta}) at target {self.value} with a drift % of {self.drift}'