Combining led blink and fade (PWM)

I'm doing my best on learning state machine, this is what I came up with,
don't know where did I make mistakes....

const byte ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 45};
byte LEDCOUNT = sizeof(ledPins) / sizeof(ledPins[0]);
byte ledIndex = 0;
const unsigned long FIVESECS = 5000;
unsigned long currentTime;
unsigned long startTime;

enum states
{
  ALL_FADE_UP_TOGETHER,
  ALL_ON_FOR_5_SECS,
  ALL_FADE_DOWN_TOGETHER,
  ALL_FADE_UP_DOWN_IN_SEQUENCE,
  LED7_IN_OUT,
  LED6_8_IN_OUT,
  DO_NOTHING
};
byte currentState = ALL_FADE_UP_TOGETHER;

void setup()
{
  Serial.begin(115200);
  for (int pin = 0; pin < LEDCOUNT; pin ++)
  {
    pinMode(ledPins[pin], OUTPUT);
    digitalWrite(ledPins[pin], HIGH);
  }
  Serial.println("Fading all up together");
}

void loop()
{
  currentTime = millis();
  switch (currentState)
  {
    case ALL_FADE_UP_TOGETHER:
      {
        static int pwmLevel = 255;
        static int pwmIncrement = -1;
        unsigned long period = 20;
        if (currentTime - startTime >= period)
        {
          setPwmLevelForAllLeds(pwmLevel);
          startTime = millis();
          pwmLevel += pwmIncrement;
          if (pwmLevel <= 0)
          {
            setPwmLevelForAllLeds(255);
            currentState = ALL_ON_FOR_5_SECS;
            startTime = currentTime;
            setPwmLevelForAllLeds(0);   //all on
            Serial.println("Waiting 5 seconds");
          }
        }
      }
      break;
    //*****
    case ALL_ON_FOR_5_SECS:
      if (currentTime - startTime >= FIVESECS)
      {
        currentState = ALL_FADE_DOWN_TOGETHER;
        Serial.println("Fading all down together");
        startTime = currentTime;
        setPwmLevelForAllLeds(0);   //all on
      }
      break;
    //*****
    case ALL_FADE_DOWN_TOGETHER:
      //    case ALL_FADE_UP_TOGETHER:
      {
        static int pwmLevel = 0;
        static int pwmIncrement = 1;
        unsigned long period = 20;
        if (currentTime - startTime >= period)
        {
          setPwmLevelForAllLeds(pwmLevel);
          startTime = millis();
          pwmLevel += pwmIncrement;
          if (pwmLevel >= 255)
          {
            setPwmLevelForAllLeds(255);   //all off
            currentState = ALL_FADE_UP_DOWN_IN_SEQUENCE;
            startTime = currentTime;
            setPwmLevelForAllLeds(255);   //all off
            Serial.println("Fading all up down in sequence");
          }
        }
      }
      break;



    //*****
    case LED7_IN_OUT:
      {
        static unsigned long startTime;
        static int pwmLevel = 0;
        static int pwmIncrement = 1;
        unsigned long period = 5;
        if (currentTime - startTime >= FIVESECS)
        {
          currentState = ALL_FADE_DOWN_TOGETHER;
          Serial.println("Fading all down together");
          startTime = currentTime;
          setPwmLevelForLed7(0);
        }
      }
        break;



      //----

      case LED6_8_IN_OUT:
        {
          static unsigned long startTime;
          static int pwmLevel = 0;
          static int pwmIncrement = 1;
          unsigned long period = 5;
          if (currentTime - startTime >= FIVESECS)
          {
            currentState = ALL_FADE_DOWN_TOGETHER;
            Serial.println("Fading all down together");
            startTime = currentTime;
            setPwmLevelForLed6_8(0);

          }
        }
          break;




        //*****
        case ALL_FADE_UP_DOWN_IN_SEQUENCE:
          {
            static unsigned long startTime;
            static int pwmLevel = 255;
            static int pwmIncrement = -1;
            unsigned long period = 5;
            if (currentTime - startTime >= period)
            {
              analogWrite(ledPins[ledIndex], pwmLevel);
              startTime = millis();
              pwmLevel += pwmIncrement;
              if (pwmLevel <= 0)
              {
                pwmIncrement *= -1;
                pwmLevel += pwmIncrement;
              }
              if (pwmLevel >= 255)
              {
                pwmLevel = 255;
                analogWrite(ledPins[ledIndex], pwmLevel);  //make sure that the  LED is off
                pwmIncrement *= -1;
                ledIndex++;
                if (ledIndex >= LEDCOUNT)
                {
                  currentState = DO_NOTHING;
                  Serial.println("Doing nothing forever");
                }
              }
              break;
            }
          }
        //*****
        case DO_NOTHING:
          {
            break;
          }
        }
      }

  

      void setPwmLevelForAllLeds(byte pwmLevel)
      {
        for (int ledIndex = 0; ledIndex < LEDCOUNT; ledIndex++)
        {
          analogWrite(ledPins[ledIndex], pwmLevel);
        }
      }


        void setPwmLevelForLed7(byte pwmLevel)
        {
          for (int ledIndex = 0; ledIndex < LEDCOUNT; ledIndex++)
          {
            analogWrite(ledPins[7], pwmLevel);
          }
        }

          void setPwmLevelForLed6_8(byte pwmLevel)
          {
            for (int ledIndex = 0; ledIndex < LEDCOUNT; ledIndex++)
            {
              analogWrite(ledPins[6], pwmLevel);
              analogWrite(ledPins[8], pwmLevel);
            }
          }