#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
enum console {nswitch=1,ps4,xbox,pc};

class Produto{
protected:
  int codigoproduto;
public:

virtual void ler();
virtual float getPreco()=0;
virtual int getTipo()=0;
int getCodigo(){return codigoproduto;}
};
void Produto::ler(){
  printf("DIGITE O CODIGO DO PRODUTO:\n");
  scanf("%d",&codigoproduto);
}

//////////////////////////// CARRO ///////////////////////
class Carro: public Produto {
private:
  float precocarro;
  char placa[50];
  int ano;
  char fabricante[50];
  char modelo[50];
public:
  virtual void listar(int quant);
  virtual int getTipo();
  virtual void ler();
  int getAno(){return ano;}
  char* getplaca(){return placa;}
  char* getfabricante(){return fabricante;}
  char* getmodelo(){return modelo;}
};
int Carro::getTipo(){
  return 1;
}
void Carro::listar(int quant){
for(int i=0;i<quant;i++){
  printf("PLACA%c\n",getplaca());
  printf("ANO:%c\n",getAno());
  printf("FABRICANTE:%c\n",getfabricante());
  printf("MODELO%d:\n",getmodelo());
}
}

void Carro::ler(){
printf("ANO:\n");scanf("%d",&ano);fflush(stdin);
printf("PLACA:\n");scanf("%[^\n]",placa);fflush(stdin);
printf("MODELO:\n");scanf("%[^\n]",modelo);fflush(stdin);
printf("FABRICANTE:\n");scanf("%[^\n]",fabricante);fflush(stdin);
}
////////////// DVD ////////////////////////////
class Dvd: public Produto{
private:
  char titulo[50];
  char nomeatorprincipal[50];
  char nomediretor[50];
  char categoria[50];
  int anolancamento;
  float precodvd;
public:
   void listar(int quant);
  virtual int getTipo();
  virtual void ler();
  char* getTitulo(){return titulo;}
  char* getDiretor(){return nomediretor;}
  int getAnolancamento(){return anolancamento;}
  char* getNomeato(){return nomeatorprincipal;}
};
int Dvd::getTipo(){return 2;}
void Dvd::listar(int quant){
for(int i=0;i<quant;i++){
  printf("TITULO:%c\n",getTitulo());
  printf("%ATOR:%c\n",getNomeato());
  printf("DIRETOR:%c\n",getDiretor());
  printf("ANO%d:\n",getAnolancamento());
}
}
void Dvd::ler(){
printf("ANO:\n");scanf("%d",&anolancamento);fflush(stdin);
printf("TITULO:\n");scanf("%[^\n]",&titulo);fflush(stdin);
printf("CATEGORIA:\n");scanf("%[^\n]",&categoria);fflush(stdin);
printf("ATOR:\n");scanf("%[^\n]",&nomeatorprincipal);fflush(stdin);
printf("DIRETOR:\n");scanf("%[^\n]",&nomediretor);fflush(stdin);
}

class Jogo: public Produto {
private:
  char console[30];
  float precojogo;
  char titulo[50];
  char categoria[50];
  int qtdplayers;
public:
  void listar(int quant);
  virtual int getTipo();
  virtual void ler();
  char* getConsole(){return console;}
  void* getTitulo(){return titulo;}
  char* getCategoria(){return categoria;}
  int getQtdplayers(){return qtdplayers;}
};
int Jogo::getTipo(){return 3;}
void Jogo::listar(int quant){
for(int i=0;i<quant;i++){
  printf("\nTITULO:%c\n",getTitulo());
  printf("%CONSOLE:%c\n",getConsole());
  printf("CATEGORIA:%c\n",getCategoria());
  printf("NUMERO DE JOGADOREs%d:\n",getQtdplayers());
}
}
void Jogo::ler(){
printf("NUMERO DE JOGADORS:\n");scanf("%d",&qtdplayers);fflush(stdin);
printf("TITULO:\n");scanf("%[^\n]",&titulo);fflush(stdin);
printf("CATEGORIA:\n");scanf("%[^\n]",&categoria);fflush(stdin);
printf("CONSOLE:\n");scanf("%[^\n]",&console);fflush(stdin);
}

class VideoLocadora{
private:
  Produto *v[100];
  int qtd;
public:
  VideoLocadora();
  void ler();
  int existe(int cdg);
  void Inserir(Produto *d);
  void remover(int cdg);
  void listar(Produto *d);
  void desfazer(Produto *d);
  float getvalor(Produto *d);
};


//FACTORY method
Produto* CriarNovoProduto(){
char letra;
do{
   printf("QUAL PRODUTO?:\n");
   printf("(J)OGO  (C)ARRO  (D)VD\n");
   letra=getchar();
   letra=tolower(letra);
  }while(letra!='j' && letra!='c' && letra!= 'd');
 switch(letra){
   case 'j':
     return new Jogo();
    case 'c':
     return new Carro();
    case 'd':
     return new Dvd();
     default:
     return NULL;
              }
}

VideoLocadora::VideoLocadora(){
qtd=0;
}
void VideoLocadora::ler(){
v[qtd]=CriarNovoProduto();
v[qtd]->ler();
}

int VideoLocadora::existe(int cdg){

  for(int i=0;i<qtd;i++){
    if(v[i]->getCodigo()==cdg)
    return i;
  }
  return -1;
}

void VideoLocadora::Inserir(Produto *d){
  v[qtd]=d;
  qtd++;
}
void VideoLocadora::remover(int cdg){
int pos=existe(cdg);
     if (pos>-1)
     {
        delete v[pos];
        v[pos] = v[qtd-1];
        qtd--;
     }
}

int main(){
VideoLocadora x;

x.ler();


return 0;
}
