from .base import BaseGenreProfile

# --- 1. MAINSTAGE & HIGH-ENERGY ---

class TechHouseProfile(BaseGenreProfile):
    name = "Tech House"
    description = "Punchy, dry kicks with clean mid-range."
    target_lufs = -7.0
    slope_target = -3.0
    crest_target = 8.5
    width_high = 1.1
    vintage_mode = "Solid"
    saturation = 1.0
    mono_cutoff = 130

class FutureRaveProfile(BaseGenreProfile):
    name = "Future Rave"
    description = "David Guetta style. Bright, aggressive, wide."
    target_lufs = -6.5
    slope_target = -2.5 # Bright
    crest_target = 7.5
    width_high = 1.4
    vintage_mode = "Solid"
    saturation = 2.0
    mono_cutoff = 120

class BassHouseProfile(BaseGenreProfile):
    name = "Bass House"
    description = "Metallic bass focus. Aggressive mid-range."
    target_lufs = -7.0
    slope_target = -3.2
    crest_target = 8.0
    width_high = 1.2
    vintage_mode = "Tube"
    saturation = 2.5
    mono_cutoff = 140

class BigRoomTechnoProfile(BaseGenreProfile):
    name = "Big Room Techno"
    description = "Massive reverb tails, huge kicks."
    target_lufs = -6.8
    slope_target = -3.0
    crest_target = 8.0
    width_high = 1.3
    vintage_mode = "Solid"
    saturation = 1.5
    mono_cutoff = 100

class MainstageProgressiveProfile(BaseGenreProfile):
    name = "Mainstage Progressive"
    description = "Festival anthems. Emotional & loud."
    target_lufs = -7.0
    slope_target = -3.0
    crest_target = 8.5
    width_high = 1.35
    vintage_mode = "Tape"
    saturation = 1.0
    mono_cutoff = 120

class SlapHouseProfile(BaseGenreProfile):
    name = "Slap House"
    description = "Bouncy, short bass. Commercial balance."
    target_lufs = -7.5
    slope_target = -3.1
    crest_target = 9.0
    width_high = 1.2
    vintage_mode = "Solid"
    saturation = 1.2
    mono_cutoff = 150

class ElectroHouseProfile(BaseGenreProfile):
    name = "Electro House"
    description = "Gritty, distorted 2025 revival."
    target_lufs = -6.5
    slope_target = -2.8
    crest_target = 7.0
    width_high = 1.25
    vintage_mode = "Tube"
    saturation = 3.0
    mono_cutoff = 140

class ComplextroProfile(BaseGenreProfile):
    name = "Complextro"
    description = "Glitchy, rapid frequency jumps."
    target_lufs = -7.2
    slope_target = -3.0
    crest_target = 9.0
    width_high = 1.3
    vintage_mode = "Solid"
    saturation = 1.5
    mono_cutoff = 130

class MelbourneBounceProfile(BaseGenreProfile):
    name = "Melbourne Bounce"
    description = "Off-beat bass focus."
    target_lufs = -7.0
    slope_target = -3.0
    crest_target = 8.5
    width_high = 1.15
    vintage_mode = "Solid"
    saturation = 1.0
    mono_cutoff = 140

# --- 5. HOUSE MUSIC VARIANTS ---

class DeepHouseProfile(BaseGenreProfile):
    name = "Deep House"
    description = "Warm, round low-end. Gentle highs."
    target_lufs = -11.0
    slope_target = -4.5
    crest_target = 11.0
    width_high = 1.1
    vintage_mode = "Tube"
    saturation = 1.5
    mono_cutoff = 110

class AfroHouseProfile(BaseGenreProfile):
    name = "Afro House"
    description = "Percussion transients are sacred."
    target_lufs = -9.0
    slope_target = -3.5
    crest_target = 10.5
    width_high = 1.25
    vintage_mode = "Tape"
    saturation = 0.5
    mono_cutoff = 130

class AmapianoProfile(BaseGenreProfile):
    name = "Amapiano"
    description = "Log Drum bass focus. Open dynamics."
    target_lufs = -10.0
    slope_target = -4.0
    crest_target = 11.0
    width_high = 1.2
    vintage_mode = "Tube"
    saturation = 1.0
    mono_cutoff = 100

class OrganicHouseProfile(BaseGenreProfile):
    name = "Organic House"
    description = "Natural instruments. Transparent."
    target_lufs = -10.5
    slope_target = -4.2
    crest_target = 11.5
    width_high = 1.15
    vintage_mode = "Tape"
    saturation = 0.5
    mono_cutoff = 120

class ProgressiveHouseProfile(BaseGenreProfile):
    name = "Progressive House"
    description = "Smooth, linear energy curve."
    target_lufs = -9.0
    slope_target = -3.8
    crest_target = 10.0
    width_high = 1.3
    vintage_mode = "Tape"
    saturation = 1.0
    mono_cutoff = 120

class JackinHouseProfile(BaseGenreProfile):
    name = "Jackin House"
    description = "Swing heavy. Saturation on drums."
    target_lufs = -8.0
    slope_target = -3.3
    crest_target = 9.5
    width_high = 1.1
    vintage_mode = "Tube"
    saturation = 2.0
    mono_cutoff = 130

class FrenchHouseProfile(BaseGenreProfile):
    name = "French House"
    description = "Aggressive bus compression (pumping)."
    target_lufs = -7.5
    slope_target = -3.0
    crest_target = 8.0
    width_high = 1.2
    vintage_mode = "Solid"
    saturation = 2.5
    mono_cutoff = 130

class LoFiHouseProfile(BaseGenreProfile):
    name = "Lo-Fi House"
    description = "Dusty, high noise floor allowed."
    target_lufs = -10.0
    slope_target = -4.5
    crest_target = 10.0
    width_high = 0.9
    vintage_mode = "Tape"
    saturation = 3.5
    mono_cutoff = 150

class SoulfulHouseProfile(BaseGenreProfile):
    name = "Soulful House"
    description = "Vocal focus. Mid-range clarity."
    target_lufs = -9.5
    slope_target = -3.8
    crest_target = 10.5
    width_high = 1.2
    vintage_mode = "Tube"
    saturation = 1.0
    mono_cutoff = 120

class AcidHouseProfile(BaseGenreProfile):
    name = "Acid House"
    description = "Raw, unpolished 303s."
    target_lufs = -8.5
    slope_target = -3.2
    crest_target = 9.0
    width_high = 1.1
    vintage_mode = "Tube"
    saturation = 3.0
    mono_cutoff = 140
