module Hix.Managed.Cabal.Mock where

import Distribution.Simple (buildCompilerId, unknownCompilerInfo)
import Distribution.Simple.Compiler (AbiTag (NoAbiTag))
import Distribution.Solver.Types.PkgConfigDb (PkgConfigDb (NoPkgConfigDb))
import Distribution.System (Arch (X86_64), OS (Linux), Platform (Platform))

import Hix.Managed.Data.ManagedPackage (ManagedPackage)
import Hix.Managed.Data.Packages (Packages)
import qualified Hix.Managed.Cabal.Data.Packages
import Hix.Managed.Cabal.Data.Packages (GhcPackages (GhcPackages))
import qualified Hix.Managed.Cabal.Data.SolveResources
import Hix.Managed.Cabal.Data.SolveResources (SolveResources (SolveResources))
import Hix.Managed.Cabal.Init (emptySolveFlags)
import Hix.Managed.Cabal.Mock.InstalledPackage (mockInstalledPackageIndex)
import qualified Hix.Managed.Cabal.Mock.SourcePackage as SourcePackage
import Hix.Managed.Cabal.Mock.SourcePackage (mockSourcePackageDb)

mockSolveResources ::
  Packages ManagedPackage ->
  GhcPackages ->
  SolveResources
mockSolveResources :: Packages ManagedPackage -> GhcPackages -> SolveResources
mockSolveResources Packages ManagedPackage
packages GhcPackages {InstalledPackages
installed :: InstalledPackages
installed :: GhcPackages -> InstalledPackages
installed, SourcePackages
available :: SourcePackages
available :: GhcPackages -> SourcePackages
available} = do
  SolveResources {
    conf :: SolveConfig
conf = SolveConfig
forall a. Default a => a
def,
    flags :: SolveFlags
flags = SolveFlags
emptySolveFlags,
    platform :: Platform
platform = Arch -> OS -> Platform
Platform Arch
X86_64 OS
Linux,
    compiler :: CompilerInfo
compiler = CompilerId -> AbiTag -> CompilerInfo
unknownCompilerInfo CompilerId
buildCompilerId AbiTag
NoAbiTag,
    pkgConfigDb :: PkgConfigDb
pkgConfigDb = PkgConfigDb
NoPkgConfigDb,
    installedPkgIndex :: InstalledPackageIndex
installedPkgIndex = InstalledPackages -> InstalledPackageIndex
mockInstalledPackageIndex InstalledPackages
installed,
    sourcePkgDb :: SourcePackageDb
sourcePkgDb = Packages ManagedPackage -> SourcePackageDb -> SourcePackageDb
SourcePackage.dbWithManaged Packages ManagedPackage
packages (SourcePackages -> SourcePackageDb
mockSourcePackageDb SourcePackages
available),
    solverParams :: DepResolverParams -> DepResolverParams
solverParams = DepResolverParams -> DepResolverParams
forall a. a -> a
id
  }