<?php

class UsersSeeder extends Seeder {

    protected function readFile($group)
    {
        set_time_limit(0);
        ini_set('memory_limit', '-1');
        ini_set('auto_detect_line_endings', true);

        $file = app_path()."/database/seeds/users/$group.csv";

        if (!file_exists($file))
        {
            return array();
        }

        $users = array();
        $modified = false;

        $handle = fopen($file, 'r');
        if ($handle)
        {
            while (($line = fgets($handle)) !== false)
            {
                list($first_name, $last_name, $email, $password) = explode(';', trim($line));
                
                if (!$password)
                {
                    $password = str_random(7);
                    $modified = true;
                }
                
                $users[] = array(
                    'first_name' => $first_name,
                    'last_name'  => $last_name,
                    'email'      => $email,
                    'password'   => $password,
                );
            }
        }
        fclose($handle);

        if ($modified)
        {
            $handle = fopen($file, 'w');
            foreach ($users as $user)
            {
                fputcsv($handle, $user, ';');
            }
            fclose($handle);
        }

        return $users;
    }

    public function register($user)
    {
        return Sentry::register($user);
    }

    public function run()
    {
        $admins = Sentry::createGroup(array(
            'name'        => 'Administrators',
            'permissions' => array(
                'admin'   => 1,
                'users'   => 1,
                'edit'    => 1,
            ),
        ));

        $editors = Sentry::createGroup(array(
            'name'        => 'Editors',
            'permissions' => array(
                'admin'   => 0,
                'users'   => 0,
                'edit'    => 1,
            ),
        ));

        $users = Sentry::createGroup(array(
            'name'        => 'Users',
            'permissions' => array(
                'admin'   => 0,
                'users'   => 0,
                'edit'    => 0,
            ),
        ));

        foreach ($this->readFile('administrators') as $administrator)
        {
            $administrator = $this->register($administrator);
            $administrator->attemptActivation($administrator->getActivationCode());
            $administrator->addGroup($admins);
        }

        foreach ($this->readFile('editors') as $editor)
        {
            $editor = $this->register($editor);
            $editor->attemptActivation($editor->getActivationCode());
            $editor->addGroup($editors);
        }

        foreach ($this->readFile('users') as $user)
        {
            $user = $this->register($user);
            $user->attemptActivation($user->getActivationCode());
            $user->addGroup($users);
        }
    }

}