from __future__ import annotations
from typing import TYPE_CHECKING

from models.targets.target import *

if TYPE_CHECKING:
    from models.problem import Problem

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

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