import faker from 'faker';
import kommuner from './kommuner.js';
import languages from './languages.js';
import organizations from './organizations.js';
import tjanster from './tjanster.js';
import utforandeVerksamheter from './utforande-verksamheter.js';

faker.locale = 'sv';

const TJANSTER = tjanster.generate();
const SUPORTLANGUAGES = languages.generate();
const TRACK = [{ kod: 'A012SP1', name: 'Nivå A: Kundval Rusta och matcha' }];
const ORGANIZATIONS = organizations.generate();
const UTFORANDEVERKSAMHETER = utforandeVerksamheter.generate();
const KOMMUNER = kommuner.generate();
const FREKVENSER = ['25%', '50%', '75%', '100%'];

function generateAvrop(amount = 10, deltagare, handledare) {
  const avrop = [];

  for (let i = 1; i <= amount; ++i) {
    const organization = ORGANIZATIONS[Math.floor(Math.random() * ORGANIZATIONS.length)];
    const utforandeVerksamhet = UTFORANDEVERKSAMHETER[Math.floor(Math.random() * UTFORANDEVERKSAMHETER.length)];
    const kommun = KOMMUNER[Math.floor(Math.random() * KOMMUNER.length)];
    const tjanst = TJANSTER[Math.floor(Math.random() * TJANSTER.length)];
    const track = TRACK[Math.floor(Math.random() * TRACK.length)];
    const currentDeltagare = deltagare[i - 1];
    const utforandeAdress = utforandeVerksamhet.adresser[0];

    avrop.push({
      id: faker.datatype.uuid(),
      fornamn: currentDeltagare.contact.fornamn,
      efternamn: currentDeltagare.contact.efternamn,
      deltagare: `${currentDeltagare.contact.fornamn} ${currentDeltagare.contact.efternamn}`,
      genomforandeReferens: faker.datatype.number({ min: 100000000, max: 999999999 }),
      orgId: faker.datatype.uuid(),
      leverantorId: faker.datatype.number({ min: 1000, max: 99999 }),
      organisationsnummer: organization.organizationNumber,
      utforandeVerksamhetId: utforandeVerksamhet.utforandeVerksamhetId,
      utforandeverksamhet: utforandeVerksamhet.namn,
      kommunKod: kommun.id,
      kommun: kommun.label,
      utforandeAdressId: utforandeAdress.adressId,
      adress: utforandeAdress.adressrad,
      ordernummer: `AKTTEST-${faker.datatype.number({ min: 10000, max: 99999 })}`,
      bokningsId: faker.datatype.number({ min: 100000, max: 999999 }),
      personnummer: currentDeltagare.personnummer,
      sokandeId: currentDeltagare.sokandeId,
      tjanstekod: tjanst.id,
      tjansteNamn: tjanst.label,
      deltagandeGrad: FREKVENSER[Math.floor(Math.random() * FREKVENSER.length)],
      startdatumAvrop: faker.date.recent(),
      slutdatumAvrop: faker.date.future(),
      aktnummerDiariet: `Af-2021/0000 ${faker.datatype.number({ min: 1000, max: 9999 })}`,
      tolkbehov: currentDeltagare.translator.sprak.beskrivning,
      sprakstod: SUPORTLANGUAGES[Math.floor(Math.random() * SUPORTLANGUAGES.length)].beskrivning,
      sparkod: track.kod,
      sparNamn: track.name,
      handledareCiamUserId: null,
      recievedTimestamp: faker.date.recent(),
      hasAvbrott: currentDeltagare.hasAvbrott,
    });
  }

  console.info('Avrop generated...');
  return avrop;
}

export default {
  generate: generateAvrop,
};
