summaryrefslogblamecommitdiffstats
path: root/generate-sample-gig-data.php
blob: 19eaffc6364a371cdf5c992d27518a411003d0d7 (plain) (tree)
1
2
3
4
5
6
7
     




                                                                               
 








                                             
                                            
 






                                                    


     




                                               
       

                




                                                        


              

      
       

               




                                                                                                               







                      

      
       

             




                                                                                                    






                     

      
       

               




                                                                   



              

      



                                    
                       



                                           
 
                                                                              


     




                                            
       

                




                                                                              




                  

      
       

                




                                                                                         





                  

      
       

                     




                                                                                                    






                     

      



                                     
                       



                                          
 
                                              


     




                                                
       

                               

                     

                                                                     




                                
                             

                       




                                                                      
 
                                                                                                                                      
 
<?php

// SPDX-FileCopyrightText: 2021 Andrea Chirulescu <andrea.chirulescu@gmail.com>
// SPDX-FileCopyrightText: 2021 Harald Eilertsen <haraldei@anduin.net>
//
// SPDX-License-Identifier: AGPL-3.0-or-later

/**
 * Abstract base class for a generator.
 */
abstract class GeneratorBase {

    /**
     * Return a generated string.
     * Must be implemented by derived classes
     */
    abstract public function get() : string;

    /**
     * Return a random element from an array.
     *
     * @param array $arr an array of elements.
     */
    protected function pick( array $arr ) : string {
        return $arr[ array_rand( $arr ) ];
    }
}

/**
 * Generator for band names
 */
class BandNameGenerator extends GeneratorBase {

    /**
     * Prefixes.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string}
     */
    private array $prefixes = array(
        '',
        'a',
        'the',
    );

    /**
     * Adverbs.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string, 6: string, 7: string}
     */
    private array $adverbs = array(
        'bestial',
        'dead',
        'incongruent',
        'ladylike',
        'slimy',
        'dandy',
        'leftist',
        'flamboyant',
    );

    /**
     * Verbs.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string, 6: string}
     */
    private array $verbs = array(
        'kill',
        'regurgitat',
        'destroy',
        'blasphem',
        'strangl',
        'terroriz',
        'mutilat',
    );

    /**
     * Endings.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string}
     */
    private array $endings = array(
        'er',
        'ers',
        'ing',
        'ed',
    );

    /**
     * Return a generated band name.
     */
    public function get() : string {
        $parts = array(
            $this->pick( $this->prefixes ),
            $this->pick( $this->adverbs ),
            $this->pick( $this->verbs ),
		);

        return trim( implode( ' ', $parts ) . $this->pick( $this->endings ) );
    }
}

/**
 * Generator for venue names
 */
class VenueGenerator extends GeneratorBase {

    /**
     * Prefix 1.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string}
     */
    private array $prefix1 = array(
        '',
        'royal',
        'shabby',
        'happy',
        'drunken',
    );

    /**
     * Prefix 2.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string}
     */
    private array $prefix2 = array(
        '',
        'music',
        'fiddler',
        'rock',
        'metal',
        'mental',
    );

    /**
     * Type of venue.
     *
     * @var string[]
     *
     * @psalm-var array{0: string, 1: string, 2: string, 3: string, 4: string, 5: string, 6: string}
     */
    private array $type = array(
        'hall',
        'museum',
        'asylum',
        'stage',
        'cottage',
        'opera',
        'lighthouse',
    );

    /**
     * Return a generated venue name.
     */
    public function get() : string {
        $parts = array(
            $this->pick( $this->prefix1 ),
            $this->pick( $this->prefix2 ),
            $this->pick( $this->type ),
		);

        return trim( implode( ' ', $parts ) );
    }
}

/**
 * Generator for links (event and ticket links.)
 */
class LinkGenerator extends GeneratorBase {

    /**
     * Return a generated link.
     *
     * @return string
     */
    public function get() : string {
        return 'https://example.com/' . bin2hex( random_bytes( 8 ) );
    }
}

$band = new BandNameGenerator();
$venue = new VenueGenerator();
$links = new LinkGenerator();
$date = new DateTime();

$prog = array_shift( $argv );
$num = intval( array_shift( $argv ) ) ?? 10;

for ( $i = 0; $i < $num; $i++ ) {
    $date->add( new DateInterval( 'P' . random_int( 0, 60 ) . 'D' ) );

    echo implode( "\t", array( $band->get(), $venue->get(), "Oslo", $date->format( 'Y-m-d' ), $links->get(), $links->get() ) ) . "\n";
}